校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > java语言 > Map、set集合(后序会删除)
题目

jdk7和jdk8的hashmap有什么区别

解答

DK7是数组+链表,JDK8 是数组+链表/红黑树。

1、链表插入方式的不同
在1.7之前,链表元素的插入采用的是头插法,也就是说,当有新结点进来时,会在插入在链表的头部。很明显,由于不用遍历链表,这种插入方式的效率是更高的。但是1.8之后,因为当结点插入的时候,本身就要为了判断元素的个数而遍历链表(看看是否达到了树化的阈值),所以就可以搭一个顺风车,在遍历完之后,把结点插入到链表尾部,即采用的尾插法。这种方式也解决了多线程下可能引发的死锁问题。因为头插法的链表在扩容移动时,会被逆序,即后插入的先被处理,如果这个时候有另一线程进行get操作,就有可能引发死锁

2、插入时机不同
1.7之前是扩容后再插入新的数据,并且不会先计算插入值的哈希值,最后单独算。
1.8之后是先插入再扩容,插入的值和大家一起计算新的哈希值。

C 1条回复 评论
雾岛残月

好文,喜欢看,比书上的好

发表于 2023-09-19 21:00:00
0 0