JDK8的HashMap有哪些变化
时间: 2023-10-26 20:06:16 浏览: 46
JDK8中HashMap相较于JDK7有以下变化:
1. 数组+链表+红黑树:当链表长度超过8时,将链表转化为红黑树,从而提高查询效率。
2. 红黑树节点的引入:红黑树节点实现了Map.Entry接口,因此不需要额外的Entry类来保存键值对。
3. 链表的改变:在JDK7中,每个节点都是一个单独的Entry对象,而在JDK8中,每个节点是一个单独的Node对象,包含了key、value、hash值和指向下一个节点的指针,从而减少了对象创建和内存开销。
4. 性能优化:在JDK8中,对于链表长度小于8的链表,使用了更加高效的链表遍历方式,从而提高了性能。
5. 扩容机制的改变:在JDK8中,扩容时不再是一次性将table数组扩大为原来的两倍,而是按需扩容,即当table数组中的元素数量达到了负载因子与数组长度的乘积时,才进行扩容操作。
总体上,JDK8中HashMap的实现更加高效、简洁,并且对于多线程的支持也更好。
相关问题
jdk到jdk.hashmap发生了什么变化(底层)
从JDK1.7开始,HashMap对于hash值相同的不同key采取了链式存储结构,称为“链表”,因此称为“链表散列”。但是,当链表中的元素超过阈值(默认为8)时,链表会转换为平衡树(红黑树)结构,称为“树形散列”,以保证插入、删除和搜索的时间复杂度为O(logN)。这提高了HashMap的性能和效率。从JDK1.8开始,对于小于等于6的元素,HashMap采用链表存储结构,对于大于等于8的元素,HashMap采用红黑树存储结构,并可以通过TreeifyThreshold参数来调整阈值。同时,JDK1.8还引入了结构修改次数和快速失败机制,以提高HashMap的稳定性和可靠性。
hashMap不同Jdk下的底层原理变化
在不同版本的JDK中,HashMap的底层实现方式可能会有所变化。以下是一些可能的变化:
1. JDK1.7中的HashMap使用数组和链表实现,当链表长度超过阈值时,链表转换为红黑树。而JDK1.8中的HashMap在链表长度达到8时才会将链表转换为红黑树。
2. JDK1.8中的HashMap使用数组+单向链表+红黑树实现,对于链表冲突的情况,通过红黑树来加快查询速度。
3. JDK1.8中的HashMap使用“位运算”代替了“取模运算”,从而提高了HashMap的效率。
4. JDK1.8中的HashMap使用了“红黑树优化”来提高查询效率,对于节点数较少的情况下,HashMap使用链表的方式进行存储。
需要注意的是,虽然在不同版本的JDK中HashMap的底层实现可能会有所不同,但是HashMap的API接口是不变的,所以在使用HashMap时需要注意不同版本的实现差异可能会对性能产生影响。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)