HashMap的底层怎么玩的

jdk1.8之前  简单来说 数组+链表              链表散列

根据哈希确定数据存到数组的位置  然后链表是为了解决哈希冲突

默认的数组长度是16   加载因子是0.75  也就是说存第13个值的时候  数组会扩容至当前的2倍

翻倍是使哈希冲突降低  存在必合理

关于 自定义对象重写hashCode  和equals 方法

如果只写后者

结果会不理

在jdk1.8之后   加入了红黑树     当链表长度大于8  且这个数组长度大于64  就会生成红黑树

Hash值=(hashcode)^(hashcode >>> 16)

数组下标:hash&(16-1) = hash%16

原文地址:https://www.cnblogs.com/KingAndPig/p/13713710.html