校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > java语言 > Map 1.7和1.8
题目

JDK1.7和1.8的Hashmap有哪些区别?

解答

1、JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法

JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后使用尾插法,能够避免出现逆序且链表死循环的问题

2、扩容后数据存储位置的计算方式不一样

在JDK1.7的时候是直接用hash值和需要扩容的二进制数进行&运算

JDK1.8是扩容前的原始位置+扩容的大小值=JDK1.8的计算方式,而不再是JDK1.7中异或的方法。扩容后长度为原hash表的2倍,于是把hash表分为两半,分为低位和高位,原链表的键值对一半放在低位,一半放在高位,而且是通过e.hash & oldCap == 0来判断

3、hash计算规则不一样

在计算hash值的时候,JDK1.7用了9次扰动处理=4次位运算+5次异或

而JDK1.8只用了2次扰动处理=1次位运算+1次异或

4、底层数据结构不一样

JDK1.7使用的是数组+ 单链表的数据结构。但是在JDK1.8及之后时,使用的是数组+链表+红黑树的数据结构(当阈值是默认阈值0.75,链表的深度大于等于8,扩容的时候会把链表转成红黑树,时间复杂度从O(n)变成O(logN))

C 0条回复 评论

帖子还没人回复快来抢沙发