面试知识点总结之集合框架TreeSet/TreeMap/ConcurrentHashMap/...
admin
2024-03-28 05:40:26
0

TreeSet:

首先 set是可以去重的,tree是实现排序的,总结:

TreeSet是一个包含有序的且没有重复元素的集合,通过TreeMap实现

它继承了AbstractSet抽象类,实现了NavigableSet,Cloneable,Serializable接口。
TreeSet是基于TreeMap实现的,TreeSet的元素支持2种排序方式:自然排序或者根据提供的Comparator进行排序。
 
TreeMap:
TreeMap可以比较元素大小,会对传入的key进行大小排序。自然顺序,自定义的比较器来进行排序;
数据结构:红黑树
TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。 
 
ConcurrentHashMap:
 JDK1.7 和 JDK1.8 的实现方式不同
这里介绍JDK1.8
Node数组+链表+红黑树结构;在锁的实现上,抛弃了原有的 Segment 分段锁,采用CAS + synchronized实现更加细粒度的锁。
将锁的级别控制在了更细粒度的哈希桶数组元素级别,也就是说只需要锁住这个链表头节点(红黑树的根节点),就不会影响其他的哈希桶数组元素的读写,大大提高了并发度。
JDK1.8 中为什么使用内置锁 synchronized替换 可重入锁 ReentrantLock?
在 JDK1.6 中,对 synchronized 锁的实现引入了大量的优化,并且 synchronized 有多种锁状态,会从无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁一步步转换。
减少内存开销 。假设使用可重入锁来获得同步支持,那么每个节点都需要通过继承 AQS 来获得同步支持。但并不是每个节点都需要获得同步支持的,只有链表的头节点(红黑树的根节点)需要同步,这无疑带来了巨大内存浪费。
如何put

根据 key 计算出 hash 值;
判断是否需要进行初始化;
定位到 Node,拿到首节点 f,判断首节点 f:
如果为 null ,则通过 CAS 的方式尝试添加;
如果为 f.hash = MOVED = -1 ,说明其他线程在扩容,参与一起扩容;
如果都不满足 ,synchronized 锁住 f 节点,判断是链表还是红黑树,遍历插入;
4. 当在链表长度达到 8 的时候,数组扩容或者将链表转换为红黑树。

get

根据 key 计算出 hash 值,判断数组是否为空;
如果是首节点,就直接返回;
如果是红黑树结构,就从红黑树里面查询;
如果是链表结构,循环遍历判断。
get 方法不需要加锁。因为 Node 的元素 value 和指针 next 是用 volatile 修饰的,在多线程环境下线程A修改节点的 value 或者新增节点的时候是对线程B可见的。

ConcurrentHashMap 不支持 key 或者 value 为 null 的原因?

我们先来说value 为什么不能为 null。因为 ConcurrentHashMap 是用于多线程的 ,如果ConcurrentHashMap.get(key)得到了 null ,这就无法判断,是映射的value是 null ,还是没有找到对应的key而为 null ,就有了二义性。

而用于单线程状态的 HashMap 却可以用containsKey(key) 去判断到底是否包含了这个 null 。

相关内容

热门资讯

骆驼为什么被称为沙漠之洲 骆驼... 骆驼为什么被称为沙漠之洲 骆驼被称为沙漠之洲的原因1、骆驼被称为沙漠之舟是因为骆驼和其他动物不一样,...
灵敏机智的双子有“好人缘”吗?... 灵敏机智的双子有“好人缘”吗?他们为何会有很多朋友呢?确实是有好人缘的。主要是因为他们非常喜欢做朋友...
求火影忍者的小说,最好男主是宇... 求火影忍者的小说,最好男主是宇智波斑~男主是卡卡西也行!!(火影)春“雷”记(火影)我是晓组织(火影...
关于 杜拉斯的 《情人》 关于 杜拉斯的 《情人》1.她的母亲是数学教师。所以希望她也能成为一个数学教师。因为母亲认为只有教数...
用不敢不造句 用不敢不造句因为对读书的渴望,我不敢不抓紧分分秒秒的时间用来读书
来额尔古纳,看最美油菜花海 额... 本文转自:人民网-内蒙古频道奥洛契庄园油菜花田。实习生 张雅新摄人民网呼伦贝尔7月13日电 (富丽娟...
后来,我不再特种兵式旅游 小时候的梦想是:环游世界,吃遍天下 长大后的现状是:躺在家里,吃家乡菜 小时候很羡慕那些能到处旅游的...
西藏旅游7天攻略图,组团到西藏... 在旅游的广阔天地里,西藏始终是无数人心中的梦幻之地。那片神秘而圣洁的高原,有着雄伟壮丽的雪山,像珠穆...
长得丑的女生会有人喜欢吗 长得丑的女生会有人喜欢吗会有人喜欢。她虽然长得丑,但只要她委婉贤惠、通情达理、尊老爱幼、心灵美,这样...
上品寒士好看吗? 上品寒士好看吗?如果可以的话说说情节人物描写(女主)之类的,感激不尽。。没甚么分,请笑纳。。蛮好看的...
哪些品种的大米好吃? 哪些品种的大米好吃?黑龙江镜泊湖的响水大米;云南德宏遮放贡米;天津小站稻米……以上这几种都不错,只是...
觉得慕然家居怎么样? 觉得慕然家居怎么样?我在去年双十一买的慕然的家具,床、床头柜、梳妆台,全是慕然的,整体摆放效果好看,...
益禾堂的冰淇凌怎么样? 益禾堂的冰淇凌怎么样?益禾堂是大品牌品质值得放心,而且性价比高、口感不错∞我非常的喜欢吃他们家的冰激...
老年人怎样养生,才能让自己获得... 老年人怎样养生,才能让自己获得健康长寿呢?平时少吃油腻,多吃清淡的蔬菜,注意保证蛋白质的摄入,多喝水...
〖好听的情歌对唱〗 〖好听的情歌对唱〗麻烦各位推荐一下能在ktv和她/他对唱的好的情歌,深情,可爱的都行,谢谢!好多拉~...
驾驶汽车长途短途和中途是怎样区... 驾驶汽车长途短途和中途是怎样区分的短途是2小时以内,中途是4小时以内,长途是6小时以上的驾驶时间在1...
为什么很多很相爱的人却无法生活... 为什么很多很相爱的人却无法生活在一起呢?因为除了相爱之外,还有很多因素影响着,比如父母的阻挠、生活背...