Java容器之HashMap

版权声明:转载请注明原文链接 https://blog.csdn.net/NVPS_wyj/article/details/82959641

HashMap是用来存储key-value键值对的一个集合,每一个键值对也叫做Entry,HashMap底层是基于数组+链表实现的。HashMap允许存放key为null的键值对,存放在index为0的桶里。

1. put方法

  1. 将传入的key进行hashCode操作得到哈希值并根据HashMap数组长度进行取模运算得到index
  2. 若key已经存在,则更新值;若不存在,则插入key-value
  3. 如果index上已经有Entry存在,使用头插法

2. get方法

  1. 将key值进行hashCode操作得到哈希码并根据HashMap数组长度进行取模运算得到index
  2. 使用equals进行比较找到需要的Entry键值对并取值

3. 扩容机制

  1. 扩容时机:当数组中Entry长度大于等于数组长度*加载因子(size >= table.length * loadFactory)
  2. 扩容长度:扩充为原来2倍
  3. 长度限制:HashMap中数组的长度必须为2的幂次方

4. 链表转红黑树

  1. 在jdk8中,一个桶存储的链表长度大于 8 时会将链表转换为红黑树

猜你喜欢

转载自blog.csdn.net/NVPS_wyj/article/details/82959641
今日推荐