jdk1.8之前 简单来说 数组+链表 链表散列
根据哈希确定数据存到数组的位置 然后链表是为了解决哈希冲突
默认的数组长度是16 加载因子是0.75 也就是说存第13个值的时候 数组会扩容至当前的2倍
翻倍是使哈希冲突降低 存在必合理
关于 自定义对象重写hashCode 和equals 方法
如果只写后者
结果会不理
在jdk1.8之后 加入了红黑树 当链表长度大于8 且这个数组长度大于64 就会生成红黑树
Hash值=(hashcode)^(hashcode >>> 16)
数组下标:hash&(16-1) = hash%16