面试题002-Java-Java集合
面试题002-Java-Java集合
目录
- 面试题002-Java-Java集合
- 题目自测
- 题目答案
- 1. 说说 List,Set,Map 三者的区别?三者底层的数据结构?
- 2. 有哪些集合是线程不安全的?怎么解决呢?
- 3. 比较 HashSet 、LinkedHashSet 和 TreeSet 三者的异同?
- 4. HashMap 和 Hashtable 的区别?HashMap 和 HashSet 区别? HashMap 和 TreeMap 区别?
- 5. HashMap 的底层实现?
- 6. HashMap 的长度为什么是 2 的幂次方?
- 7. ConcurrentHashMap 和 Hashtable 的区别?
- 8. ConcurrentHashMap 线程安全的具体实现方式/底层具体实现?
- 参考资料
题目自测
- 1. 说说 List,Set,Map 三者的区别?三者底层的数据结构?
- 2. 有哪些集合是线程不安全的?怎么解决呢?
- 3. 比较 HashSet 、LinkedHashSet 和 TreeSet 三者的异同?
- 4. HashMap 和 Hashtable 的区别?HashMap 和 HashSet 区别? HashMap 和 TreeMap 区别?
- 5. HashMap 的底层实现?
- 6. HashMap 的长度为什么是 2 的幂次方?
- 7. ConcurrentHashMap 和 Hashtable 的区别?
- 8. ConcurrentHashMap 线程安全的具体实现方式/底层具体实现?
题目答案
1. 说说 List,Set,Map 三者的区别?三者底层的数据结构?
答:List 有序、可以包含重复元素。主要实现类为 ArrayList 底层数据结构为动态数组。
Set 无序,不可以包含重复元素。主要实现类为 HashSet 底层数据结构为哈希表。
Map 存储键值对,键不能重复,值可以重复。主要实现类为 HashMap 底层数据结构为数组+链表/红黑树。
2. 有哪些集合是线程不安全的?怎么解决呢?
答:常见的线程不安全的集合类有 ArrayList,LinkedList,HashSet,TreeSet, HashMap,TreeMap等。
解决办法有:1.使用concurrent包中的并发集合类,如ConcurrentHashMap等。
2.使用Collections类的静态方法返回线程安全的集合。
3.使用synchroniza关键字对需要同步的代码块加锁。
3. 比较 HashSet 、LinkedHashSet 和 TreeSet 三者的异同?
答:相同点是这三个类都实现了Set接口,都提供了集合的基本操作,都是线程不安全的。
HashSet 底层数据结构为哈希表,元素无序。
LinkedHashSet 底层数据结构为链表和哈希表,元素按照插入顺序排序,先进先出。
TreeSet 底层数据结构为红黑树,按照自然排序或者通过Comparator自定义排序。
4. HashMap 和 Hashtable 的区别?HashMap 和 HashSet 区别? HashMap 和 TreeMap 区别?
答:
HashMap 和 Hashtable :
- HashMap 线程不安全。可以存储一个null键,和多个null值。初始容量为16,扩容时容量翻倍。
- Hashtable 线程安全,其中的大部分方法使用synchronized关键字修饰。不可以存储null键和值。初始容量为11,扩容时容量变为原来的2n+1。
HashMap 和 HashSet:
- HashMap 存储键值对,基于哈希表实现。
- HashSet 仅存储不重复的元素,基于HashMap实现。
HashMap 和 TreeMap:
- HashMap 基于哈希表实现,不保证顺序,操作时间复杂度为O(1)。
- TreeMap 基于红黑树实现,按照自然排序或者通过Comparator自定义排序,操作时间复杂度为O(log n)。
5. HashMap 的底层实现?
答:它的底层是基于数组+链表、JDK8之后还包括红黑树来存储键值对。
在存储数据时,使用键的hashCode方法计算哈希值,通过哈希值确定元素在数组中的位置。HashMap会根据数组的占用情况自动的调整容量,当超过阈值时,会进行扩容,大小为原来的两倍,并将旧数组的所有元素重新计算哈值后放入新数组。如果该位置为空就直接插入,否则就检查链表或者红黑树,如果链表中已经存在相同的键,就更新对应的值,如果不存在相同的键,则插入新节点,JDK8以后当链表长度超过阈值8时,就将链表转为红黑树。
6. HashMap 的长度为什么是 2 的幂次方?
答:HashMap的长度为2的幂次方,主要是为了简化索引计算、减少哈希冲突和提高性能。通过位运算代替取模运算,可以更高效地计算数组索引,并确保哈希值的均匀分布。
7. ConcurrentHashMap 和 Hashtable 的区别?
答:两者的区别主要体现在实现线程安全的方式上不同
Hashtable 使用单一锁机制,使用synchronized关键字来实现,适用于低并发场景。
ConcurrentHashMap 采用了一种更复杂的机制,包括CAS操作、分段锁和sychronized相结合的方式来实现线程安全,提供更高的并发性能。
8. ConcurrentHashMap 线程安全的具体实现方式/底层具体实现?
答:在JDK1.7及之前,采用分段锁机制,它通过将整个Map分成多个Segment,每个Segment都有自己的锁,从而允许多线程同时访问不同的Segment。
在JDK8及以后取消了Segment,采用synchronized和CAS操作直接对哈希表中的节点进行操作,通过更加细粒度的锁,保证了高效的并发访问。
参考资料
- JavaGuide
- 牛客网-Java面试宝典
相关文章:
面试题002-Java-Java集合
面试题002-Java-Java集合 目录 面试题002-Java-Java集合题目自测题目答案1. 说说 List,Set,Map 三者的区别?三者底层的数据结构?2. 有哪些集合是线程不安全的?怎么解决呢?3. 比较 HashSet 、LinkedHashSet 和 TreeSet 三者的异同&…...
数组越界情况
数组越界情况...
工作日常学习记录
使用情景 今天开发上遇到一个搜索的需求,要求可以多选,模糊查询。我首先和前端沟通,前端多选后使用逗号分隔,拼成字符串传输给我,我后端再进行具体的处理。 具体处理 初步构想 由于需要查询的字段也是一个长的字符…...
C#中的容器
1、数组 数组是存储相同类型元素的固定大小的顺序集合 声明数组时,必须指定数组的大小 2.数组的插入和删除数据比较麻烦,但是查询比较快 2、动态数组(ArrayList) 动态数组:可自动调节数组的大小 可以存储任意类型数…...
rust + mingw安装教程
0. 说明 windows上安装rust时,需要在电脑上安装C/C构建工具。推荐的的两种工具链可以选择: visual studio build toolsmingw 官方推荐使用visual studio,若你的电脑上已经安装了visual studio,则无需再安装,直接安装…...
【sqlite3】联系人管理系统
SQLite3实现简单的联系人管理系统 有关sqlite3的基础知识请点击:SQLite3的使用 效果展示: 创建一个名为contacts.db的数据库 首先,我们需要创建一个名为contacts.db的数据库,并建立一个名为"contact"的表࿰…...
秋招Java后端开发冲刺——并发篇2(JMM与锁机制)
本文对Java的内存管理模型、volatile关键字和锁机制进行详细阐述,包括synchronized关键字、Lock接口及其实现类ReentrantLock、AQS等的实现原理和常见方法。 一、JMM(Java内存模型) 1. 介绍 JMM定义了共享内存中多线程程序读写操作的行为规…...
记录一次Chrome浏览器自动排序ajax请求的JSON数据问题
文章目录 1.前言2. 为什么会这样?3.如何解决? 1.前言 作者作为新人入职的第一天,mentor给了一个维护公司运营平台的小需求,具体需求是根据运营平台的某个管理模块所展示记录的某些字段对展示记录做排序。 第一步: myb…...
【嵌入式——FreeRTOS】任务
【嵌入式——FreeRTOS】任务 任务创建和删除动态方式创建任务静态方式创建任务 删除任务任务切换调度器任务切换流程 任务挂起任务恢复相关API函数 任务创建和删除 动态方式创建任务 任务的任务控制块以及任务的栈空间所需的内存,均由freeRTOS从freeRTOS管理的堆中…...
网关,路由器,交换机
一、网关 (Gateway) 是一种设备,用于连接不同网络,能够转发数据包并翻译协议,允许不同类型的网络通信。网关通常工作在OSI模型的应用层或传输层,提供连接和路由服务。 应用场景例子: 在企业网络中,网关可…...
sublime 3 背景和字体颜色修改
sublime 4 突然抽风,每次打开都显示 “plugin_host-3.3 has exited unexpectedly, some plugin functionality won’t be available until Sublime Text has been restarted” 一直没调好,所以我退回到sublime 3了。下载好了软件没问题,但是一…...
leetcode 403周赛 包含所有1的最小矩形面积||「暴力」
3197. 包含所有 1 的最小矩形面积 II 题目描述: 给你一个二维 二进制 数组 grid。你需要找到 3 个 不重叠、面积 非零 、边在水平方向和竖直方向上的矩形,并且满足 grid 中所有的 1 都在这些矩形的内部。 返回这些矩形面积之和的 最小 可能值。 注意…...
Stable Diffusion web UI 插件
2024.7.3更新,持续更新中 如果需要在linux上自己安装sd,参考:stable diffusion linux安装 插件复制到 /stable-diffusion-webui/extensions 目录下,然后重新启动sd即可 一、插件安装方法 每种插件的安装方法可能略有不同…...
深度学习中的反向传播算法的原理
深度学习中的反向传播算法的原理,以及如何计算梯度 反向传播算法(Backpropagation)是深度学习中最核心的优化技术之一,用于训练神经网络。它基于链式法则,通过从输出层逆向计算误差并逐层传递到输入层来更新模型参数&…...
身处奇瑞看三星:既“开卷“又“起火“,却更难受了
三星"起火" 这几天奇瑞的事情,让大家破防了,纷纷表示国内的就业市场环境普遍恶劣。 那我们转个眼,看看海外企业的情况。 最近一周,三星频频登上新闻,颇有"起火"之势。 在刚步入下半年的 7 月 1 日…...
系统架构设计师教程(清华第2版)<第1章 绪论>解读
系统架构设计师教程 第一章 绪论 1.1 系统架构概述1.1.1 系统架构的定义及发展历程1.1.2 软件架构的常用分类及建模方法1.1.3 软件架构的应用场景1.1.4 软件架构的发展未来1.2 系统架构设计师概述1.2.1 架构设计师的定义、职责和任务1.2.2 架构设计师应具备的专业素质1.3 如何成…...
Vue + Element UI + JSEncrypt实现简单登录页面
安装依赖 npm install jsencrypt --save局部引入 import JSEncrypt from jsencrypt/bin/jsencrypt;登录页面index.vue <template><div class"loginbody"><div class"logindata"><div class"logintext"><h2>Wel…...
从“关注流”到“时间线”,搜狐给内容加信任价值
文 | 螳螂观察 作者 | 易不二 在近日第十六季搜狐新闻马拉松活动中,搜狐新闻APP的“时间线”功能备受瞩目。不仅开幕式现场竖了一块“左手时间线,右手关注流”的路牌,张朝阳也着重强调了“时间线”产品的互动方式:“关注是基础&…...
vscode的一些使用问题
vscode使用技巧 1、快捷键(1)打开命令面板(2)注释(3)删除行(4)上下移动光标(5)光标回退(6)复制行(7)插入空白行…...
爬虫-网页基础
HTML 基本语法 HTML:Hyper Text Markup Language, 超文本标记语言,是计算机语言的一种,由元素构成。 p元素 <p>Web 真好玩!</p> 由三大部分组成 开始标签:一对尖括号中间包裹这元素名称元素内容&#x…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
CTF show 数学不及格
拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 用IDA Pro 64 打开这个文件 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 根据题目…...
