首页 > 其他 > 详细

HashMap相关问题

时间:2020-09-12 18:47:50      阅读:53      评论:0      收藏:0      [点我收藏+]

数组下标运算

HashMap中的下标是通过hash值与(length - 1)进行与运算获得的,例如hash&1111(15)。

位运算的效率比取余效率更高。

数组长度

HashMap的长度是2的幂次,因为2的幂次减1,二进制一定每一位都为1,保证了与运算可以得到所有数组下标。

HashMap扩容

HashMap扩容时,由于与运算的值只是多了一个高位的1,因此只需要将原下标与原数组长度进行与运算,结果为0则说明不需要改变下标,结果为1则说明新的下标等于原下标+原数组长度。

 

HashMap在并发扩容时可能会形成环链,因此是线程不安全的。

 

LinkedHashMap

1     public LinkedHashMap(int initialCapacity,
2                          float loadFactor,
3                          boolean accessOrder) {
4         super(initialCapacity, loadFactor);
5         this.accessOrder = accessOrder;
6     }

initialCapacity:初始容量

loadFactor:加载因子

accessOrder:true 基于访问顺序,false 基于插入顺序

通过继承LinkedHashMap,定义缓存容量,可以实现LRU。

 

HashMap相关问题

原文:https://www.cnblogs.com/kunwu/p/13657673.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!