首页 > 其他 > 详细

HashMap底层原理详解

时间:2021-05-08 16:27:08      阅读:18      评论:0      收藏:0      [点我收藏+]

HashMap底层原理详解

1. 说明

  1. Map接口的常用实现类:HashMap, HashTable和Properties
  2. HashMap是Map接口使用频率最高的实现类
  3. HashMap是以key - value对的方式来存储数据的(HashMap$Node类型)
  4. key不能重复,但是值可以重复,允许使用null键和null值
  5. 如果添加相同的key,则会覆盖原来的key - value,等同于修改(key不会替换,value会替换)
  6. 与HashSet一样,不保证映射的顺序,因为底层是以hash表的方式存储的
  7. HashMap没有实现同步,因此是线程不安全的,方法也没有做同步互斥的操作,没有synchronized

2. 底层原理详解

  • key - value是一个node,实现了Map.Entry<K,V>
扩容机制
  1. HashMap底层维护了Node类型的数组table,默认为null
  2. 当创建对象时,将加载因子(loadfactor)初始化为0.75
  3. 当添加k - v时,通过key的哈希值得到在table的索引,然后判断该索引处是否有元素,如果没有元素直接添加,如果该索引处有元素,继续判断该元素的key和准备加入的key是否相等,如果相等,则直接替换val,如果不相等需要判断是树结构还是链表结构,做出相应处理,如果添加时发现容量不够,需要扩容
  4. 第一次添加,则需要扩容table容量为16,临界值(threshold)为12(16*0.75)
  5. 以后再扩容,则需要扩容table容量为原来的2倍,临界值也为原来的2倍,以此类推
  6. 再Java8及以后,如果一条链表的元素个数超过8,并且table的大小>=64,j就会进行树化(红黑树)

HashMap底层原理详解

原文:https://www.cnblogs.com/mx-info/p/14744368.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!