Hashmap1.7和1.8怎么实现扩容
时间: 2024-05-18 17:11:49 浏览: 74
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 中的方式会更加高效。
相关问题
hashmap1.7和1.8扩容区别
HashMap 1.7和1.8的扩容区别在于实现方式和效率。
在HashMap 1.7中,扩容是通过创建一个新的Entry数组来实现的,然后将原来的Entry数组中的元素重新分配到新的数组中。这个过程比较耗时,因为需要重新计算每个元素在新数组中的位置。
而在HashMap 1.8中,扩容是通过链表和红黑树的结合来实现的。当链表长度超过阈值时,会将链表转换为红黑树,这样可以提高查找效率。同时,扩容时也会将原来的链表和红黑树中的元素重新分配到新的数组中,但是这个过程比HashMap 1.7中的实现更加高效。
因此,HashMap 1.8的扩容效率比HashMap 1.7更高,可以更快地完成扩容操作。
hashmap1.7 1.8扩容机制
HashMap1.7和1.8的扩容机制有所不同。
在HashMap1.7中,当HashMap中的元素数量超过了负载因子(默认为.75)与当前容量的乘积时,就会触发扩容操作。扩容操作会将HashMap的容量扩大为原来的两倍,并将原来的元素重新分配到新的桶中。
而在HashMap1.8中,当HashMap中的元素数量超过了负载因子与当前容量的乘积时,就会触发扩容操作。扩容操作会将HashMap的容量扩大为原来的两倍,并将原来的元素重新分配到新的桶中。不同的是,在重新分配元素时,HashMap1.8使用了一种新的算法,称为“红黑树”,可以将元素的查找时间从O(n)降低到O(log n)。
总的来说,HashMap1.8的扩容机制相比HashMap1.7更加高效和稳定。
阅读全文