HashMap如何添加键值对元素

HashMap底层存储机制
   Map集合在底层使用数据+链表+红黑树作为存储结构,Map中的每一个元素,都会被封装成一个内部类Entry对象,该对象存有key、value、next、hash。Map底层是一个默认长度为16的数组,在数组中保存Entry对象。所以,每次当我们使用下面这行语句时,都会将key、value存储到Entry对象中,然后将每一个Entry对象都保存在数组中,当发生哈希冲突时,会在发生哈希冲突的数组位置将Entry对象以链表的形式保存,并且当链表长度大于阈值8,数组长度大于64时,会将列表转化为红黑树,减少搜索时间。

HashMap如何添加元素
⑴判断Node类型的数组table是否为空,如果为空进行初始化。

⑵如果不为空,使用hash方法计算key的hashCode,通过(n-1) & hash计算应当存放在数组中的下标index。

⑶查看table是否存在数据。

⑷如果没有数据,就构造一个Node<K,V>节点,存放在table[index]中。

⑸如果存在数据,说明发生哈希冲突,继续判断key是否相等。

⑹如果相等,用新的value替换原数据。

⑺如果不相等,判断当前节点类型是不是TreeNode<K,V>树型节点。

⑻如果是树型节点,创造树型节点插入到红黑树中。

⑼如果不是树型节点,创建普通Node<K,V>加入链表尾部。

⑽判断链表长度大于阈值8并且数组长度大于64,如果满足,链表转换为红黑树,如果不满足,数组扩容。

⑾最后,插入完成后,判断当前节点数是否大于实际存储空间大小。

⑿如果大于,调用resize()方法,按原数组的长度,扩容一倍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值