HashMap学习总结

  • HashMap底层是数组+链表实现的

  • 数组(Node)包含四个属性

    • hash:hash处理后的key的hashcode(两次hash)

    • key:传入的key

    • value:传入的value

    • next:下一个Node

  • 当数组为空时会调用resize方法初始化size = 16,否则会根据扩容因子动态扩容

  • 计算node在数组中的位置,n - 1 & hash

    • 计算后的值必然<n

    • n :当前数组的长度(初始化为16)

    • hash:hash处理后的key的hashcode(两次hash)

  • put元素

    • 计算key的hash值,获取元素在数组中的下标

    • 如果存在node,比较key相等(== 或者 equales),则替换原node的value值,并返回原value

    • 如果存在node,比较key不相等,则添加新节点到树或链表末端,当链表长度>8后,变成红黑树

    • HashMap中的替换当前节点的元素条件

      • hash值相等

      • ==或equals的结果为true(重写对象的equals方法一定要重写hashCode)

参考:https://zhuanlan.zhihu.com/p/28587782

你可能感兴趣的:(HashMap学习总结)