HashMap的结构原理.思路简明

     HashMap实现了Map接口,底层结构是哈希表:其结构是一个table数组,每个数组元素是一个Entry对象,Entry对象包括key、value、next结点指针、hash值,每个Entry对象可以作为头结点延伸成一条链表。这个数组的长度总是2的n次幂,默认长度是16,这是为了减少hash冲突。因为计算index值时,会用默认长度-1的二进制与hashcode值进行与运算,2的n次幂-1总是会得到1111这样的二进制数,这样计算出来的结果会减少很多hash冲突。

      HashMap是根据元素的key值的hashcode来计算其在数组中的index。(默认长度情况)其原理就是key值的hashcode对哈希表的默认长度-1(二进制)进行(&)与运算,得到一个1111内的数值index,那就是它在哈希表的位置。当发生hash冲突时,采用拉链法解决hash冲突。首先调用equals方法判断key的内容是不是一样,如果是则覆盖旧数据,如果不是则用头插法(新数据替换旧数据成为头结点)生成链表。

      当HashMap内元素渐渐变多时,会自动增加数组的长度。这跟加载因子有关。HashMap提供了三个构造函数,空构造、(初始容量)、(初始容量,加载因子)。hashmap默认的长度是16,加载因子是表示哈希表填满一定容量后自增容量的尺度,默认为0.75。

     HashMap与HashTable的区别:

              它们的父类不相同,但都实现了Map接口。

              HashMap线程不安全,HashTable线程安全。

              HashTable的key-value都不允许出现null值。

              HashTable的数组默认长度是11,HashMap默认是16。

            HashTable的扩容方式old*2+1,HashMap是2的n次幂HashTable的使用对象的hashCode得到哈值,HashMap会重新计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值