HashMap

HashMap

参考:https://blog.csdn.net/wildwolf_001/article/details/107186226

JDK 1.7
  1. 数据结构?

    答:数组加链表法

  2. 怎么插入数据?

    答:链表头插法,即:链表中最新的数据插在链表头

  3. 哈希冲突怎么预防?

    答:二次哈希 or 扰动函数

  4. 怎么解决哈希冲突?

    答:链表法,其它方案:再哈希、开放寻址、公共溢出区

  5. 默认容量多少?

    答:16

  6. 扩容后存储位置的计算方式?

    答:重新计算哈希和索引

  7. 内部数组是什么时候创建的?

    答:第一次put的时候创建

JDK 1.8
  1. 1.7 和 1.8 数据结构有什么不同?

    答:引入红黑树

  2. 1.7 和 1.8 往链表上插数据的方式有什么不同?
    答:从头插法改为尾部插入

  3. 扩容后存储位置的计算方式?

    答:对老数组进行与运算,判断值是否等于0,等于0在低位,否则在高位

  4. HashMap 什么时候会把链表转化为红黑树?

    答:在链表大于等于8时会转换为红黑树,如果数组大小小于64会优先扩容