HashMap、ConcurrentHashMap相关内容

本文详细解析了HashMap、ConcurrentHashMap及Hashtable的实现原理与特性对比。针对jdk7与jdk8的不同实现方式进行了阐述,并深入探讨了其内部结构如数组与链表、红黑树的应用场景。此外还介绍了线程安全性、锁机制及性能表现等方面的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、

 HashMapConcurrentHashMapHashtable
实现jdk7数组+链表;
jdk8数组+链表(小于8)+红黑树(大于8)
jdk7数组+链表;
jdk8数组+链表(小于8)+红黑树(大于8)
数组+链表
线程安全×
 jdk7桶锁;jdk8行级锁全局锁
性能
KVK/V均可为null
get(K)返回null不能说明K键不存在
K/V不可为nullK/V不可为null
其他转化为同步:
 Collections.synchronizeMap(hashMap);
 废弃

 

2、HashMap实现原理

jdk7:数组+链表

jdk8:(size<8)数组+链表;(size>8)数组+红黑树

3、获取数组下标

对key的hash值再进行hash处理,h&(length-1)实质是截取h的后几位,保证了下标不发生数组越界。

数组扩容

默认大小16,每次扩容变为原来的两倍。

保证数组的长度为2的n次方,则length-1的二进制形式为011111111,h&(length-1)就能完整的取到h的后几位,反过来看,如果length-1的后面某一位为0,则h&(length-1)的该位置永远为0,即数组中部分下标无法到达,永远都是空的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值