Hashmap1.7和1.8怎么实现扩容
时间: 2024-05-18 21:11:49 浏览: 67
ArrayList集合与HashMap的扩容原来.docx
HashMap 在 JDK 1.7 和 JDK 1.8 中实现扩容的方式略有不同。
在 JDK 1.7 中,当 HashMap 中的元素数量达到容量的 0.75 倍时,会触发扩容操作。具体的实现过程如下:
1. 创建一个新的数组,大小为原来的两倍。
2. 遍历原来数组中的每个元素,把它们重新计算其在新数组中的位置,并存储在新数组中。
3. 把新数组赋值给 HashMap 中的 table 属性。
需要注意的是,这个过程中需要对数组进行复制和重新计算位置,因此在元素比较多时,这个过程会比较消耗时间和空间。
在 JDK 1.8 中,当 HashMap 中的元素数量达到容量的 0.75 倍时,依然会触发扩容操作。但是,这个过程中采用了一种更为高效的方式,叫做红黑树转换。
具体的实现过程如下:
1. 创建一个新的数组,大小为原来的两倍。
2. 遍历原来数组中的每个元素,把它们重新计算其在新数组中的位置,并存储在新数组中。
3. 如果某个位置上的链表长度超过 8,那么就把它转换成一个红黑树。
4. 把新数组赋值给 HashMap 中的 table 属性。
需要注意的是,这个过程中只需要对链表进行转换,因此在元素比较多时,这个过程相比于 JDK 1.7 中的方式会更加高效。
阅读全文