HashMap
参考:https://blog.csdn.net/wildwolf_001/article/details/107186226
JDK 1.7
数据结构?
答:数组加链表法
怎么插入数据?
答:链表头插法,即:链表中最新的数据插在链表头
哈希冲突怎么预防?
答:二次哈希 or 扰动函数
怎么解决哈希冲突?
答:链表法,其它方案:再哈希、开放寻址、公共溢出区
默认容量多少?
答:16
扩容后存储位置的计算方式?
答:重新计算哈希和索引
内部数组是什么时候创建的?
答:第一次put的时候创建
JDK 1.8
1.7 和 1.8 数据结构有什么不同?
答:引入红黑树
1.7 和 1.8 往链表上插数据的方式有什么不同?
答:从头插法改为尾部插入扩容后存储位置的计算方式?
答:对老数组进行与运算,判断值是否等于0,等于0在低位,否则在高位
HashMap 什么时候会把链表转化为红黑树?
答:在链表大于等于8时会转换为红黑树,如果数组大小小于64会优先扩容