关注
关于hashmap的翻倍扩容,我有一点理解,抛砖引玉,同学你可以参考一下
1. 1.8之前用头插法,因为头插法快,毕竟拉链法是没有维护尾指针的(印象中应该是没有),每次尾插是需要定位到尾节点的
2. 1.8针对hashmap并发环境下的隐患,改成了尾插,但是如1所说,性能是个问题
3. 1.8的容量要求是2的幂次,然后翻倍扩容,这样会出现这么一种情况:容量n的表,位置a的元素,在扩容后只会出现在两个地方,a或n+a,举个例子,容量是4的表,0号位置的元素可能是0、4、8,如果翻倍扩容,0--0,4--4,8--0,但是如果是一半扩容,0--0,4--4,8--1
4. 你去看一下1.8的扩容,它是先存储在一个链表中(因为按照3,所有需要迁移的元素都会到同一个位置),最后在把链表放到散列位置的。这样就解决了2里面的性能问题。
5. 其实如果不是2的幂次,定位散列位置也很快,都是(newSize-1)&hashCode
6. 有个细节可以注意一下,哈希值的获取其实是结合了高位与低位,避免了只有高位变化时候的哈希冲突,源码上好像有解释
个人理解,不一定对,有问题请指正😁
查看原帖
3 4
相关推荐
01-30 17:29
郑州大学 测试开发 点赞 评论 收藏
分享
查看34道真题和解析 点赞 评论 收藏
分享
01-12 17:45
门头沟学院 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
8719次浏览 117人参与
# 为了减少AI幻觉,你注入过哪些设定? #
3455次浏览 126人参与
# 程序员找工作至少要刷多少题? #
15187次浏览 223人参与
# 机械人避雷的岗位/公司 #
42731次浏览 286人参与
# 我现在比当时_,你想录用我吗 #
7582次浏览 98人参与
# 一张图晒一下你的AI员工 #
4179次浏览 101人参与
# 论秋招对个人心气的改变 #
8649次浏览 140人参与
# AI Coding的使用心得 #
4011次浏览 94人参与
# 刚入职的你踩过哪些坑 #
5990次浏览 119人参与
# 关于春招/暑期实习,你想知道哪些信息? #
6552次浏览 113人参与
# 牛客AI体验站 #
5713次浏览 162人参与
# 程序员能干到多少岁? #
7770次浏览 109人参与
# 12306一秒售罄,你抢到回家的票了吗? #
1532次浏览 43人参与
# 晒晒你司的新年福利 #
6604次浏览 95人参与
# 找工作时的取与舍 #
119686次浏览 867人参与
# 学历对求职的影响 #
598764次浏览 4019人参与
# 应届生进小公司有什么影响吗 #
118005次浏览 1158人参与
# 找工作的破防时刻 #
253588次浏览 1962人参与
# 你实习是赚钱了还是亏钱了? #
104025次浏览 612人参与
# 黄金这个事上,你学到了什么 #
1606次浏览 43人参与