美文网首页
HashMap - 为什么数组扩容是二倍

HashMap - 为什么数组扩容是二倍

作者: 夹胡碰 | 来源:发表于2021-03-16 18:05 被阅读0次
1. 增加运算效率

扩容时使用位运算<<,计算除余时使用(n-1)&hash,这些位运算都可以增加效率

2. 减少扩容后数据移动造成的hash冲突增多,并且数据迁移减少一半,同时方便操作

改变数据长度之后,原来存储的数据需要重新计算数组下标,找到新的存储位置,如果数组长度设置不当,则容易出现扩容之后,反而造成hash冲突变多,这样扩容就没有意义了。当使用2的倍数进行扩容时,hash冲突只会减少,最坏的情况也就是hash冲突不变。并且这种操作还可以对链表进行优化操作,通过计算新 下标>老数组长度 判断数据需不需要移动,这样整体只迁移一半的数据就完成了扩容。

相关文章

  • HashMap - 为什么数组扩容是二倍

    1. 增加运算效率 扩容时使用位运算<<,计算除余时使用(n-1)&hash,这些位运算都可以增加效率 2. 减少...

  • HashMap、HashSet、TreeMap、LinkedHa

    HashMap HashMap底层实现是数组+链表。数组大小不满足时要进行扩容操作,扩容是将容量扩展为原先的2倍,...

  • HashMap源码解析 (HashMap类-resize方法)

    扩容方法 resize( ) 扩容机制: 什么时候才需要扩容当 HashMap 中的元素个数超过数组大小(数组长度...

  • HashMap的扩容因子为什么是0.75

    最近在看HashMap源码,对于扩容因子=0.75感到很费解,为什么在用了75%的容量的时候就要进行扩容呢?数组中...

  • 面试知识点

    HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。 HaspMap扩容是怎样扩容的,为什么...

  • HashMap源码分析

    HashMap源码分析 总结 hashMap中用数组存储数据。初始值是16。每次扩容2倍。当数据>12(0.75 ...

  • 疑惑

    hashMap在jdk1.8中为什么先插入后扩容? hashSet是基于hashMap,为什么value使用new...

  • HashMap原理

    本文参考: HashMap的扩容机制---resize()HashMap的扩容及树化过程 HashMap的内部是使...

  • jdk1.8 HashMap resize方法解析

    扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载...

  • HashMap:如何进行扩容?

    在说明hashMap如何进行扩容之前,先说下为什么要进行扩容?是因为hashMap初始化的容量不够用了吗?不是,是...

网友评论

      本文标题:HashMap - 为什么数组扩容是二倍

      本文链接:https://www.haomeiwen.com/subject/anbdcltx.html