HashMap线程不安全性

2023-09-22 49 0

HashMap的底层结构以JDK1.8为一个分界线,JDK1.8之前和JDK1.8及之后的底层结构稍有不同,下面分别以JDK1.7和JDK1.8为例来介绍HashMap的底层实现。

JDK1.7中HashMap

底层结构

HashMap底层是一个数组table,数组中的每一项都是一个Entry,Entry是一个K-V对,我们所存入的键值对全都存放在Entry中。数组table的每个位置我们常称为一个桶,每个桶可能会对应多个Entry,多个Entry以链表的形式连接,此结构我们称为数组+链表结构。如下图所示:
JDK1.7中HashMap的底层结构

数组中每个位置上可能有0个、1个或多个Entry元素,这个取决于根据hash映射结果算出来的键值对在数组中的下标,若多个键值对下标相同,那么以链表的形式组织。JDK1.7使用的hash映射方法如下所示。

hash映射

计算Entry在数组中的下标时分两步:

1.计算key的哈希值;
	final int hash(Object k) {int h = 0;h ^= k.hashCode();h ^= (h >>> 20) ^ (h >>> 12);return h ^ (h >>> 7) ^ (h >>> 4)
代码编程
赞赏

相关文章

数据结构与算法 二维迷宫问题
数据结构与算法 约瑟夫环问题 Josephus问题
数据结构与算法 哈希表的特点
数据结构与算法 Farmer John 问题 农夫锯木板问题
数据结构与算法 前缀、中缀、后缀表达式求值和相互转换
链表(图文详解)