HashMap数据结构和原理

HashMap结构

hashMap 数组+链表+红黑树组成

数组

HashMap在初始化时,会有一个默认的初始容量(16),并且有一个加载因子(0.75)
HashMap的默认长度为16,是为了降低hash碰撞的几率
加载因子为0.75,扩容时,容量与加载因子的乘积为整数,从而简化计算和提高效率

链表

解决hash冲突,链表长度超过8转换为红黑树

红黑树(自平衡二叉树)

提高查询效率

尾插法

减少冲突引起的频繁扩容:

头插法会导致新元素总是被添加到链表的头部,这可能导致同一个桶中的链表变得非常长,从而增加查找、插入和删除元素的性能下降。尾插法将新元素追加到链表末尾,有助于保持链表长度较短,减少冲突引起的性能问题。

更适合并发操作

由于头插法可能导致多个线程在同一个桶的链表头部争夺锁,增加了竞争和锁的争用。尾插法减少了争夺同一个锁的概率,从而提高了并发性能。

保持插入顺序

尾插法有助于保持元素插入的顺序,这对于某些应用来说可能是重要的特性。当遍历HashMap时,元素的顺序与它们被插入的顺序相同。

hashMap线程不安全

多线程操作下,hashMap扩容rehash会导致死循环

ConcurrentHashmap线程安全

分段锁技术保证并发环境下的写操作

https://zhuanlan.zhihu.com/p/449337470

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值