HashMap的结构及源码分析

最近朋友说研究并发可以先从HashMap源码分析开始,所以就研究了下HashMap的结构和源码。

先从HashMap的结构开始。

我们都知道HashMap的用来存储key,value键值对数据的。既然是存储数据的,我们就得想一下数据存储的数据结构信息有哪些,我们所知道的数据存储结构有 数组,链表,树形,图形。数组查询快,增删慢。链表增删快查询慢,我们可以猜猜HashMap什么结构,可不可能是数组加链表相互结合,取两者的优势的结构。也就是数组+链表的结构。

在jdk1.8之前,hashmap的结构确实是数组加链表的,在jdk1.8的时候hashmap结构又进行了优化。由数组+链表的结构转为了在某特定情况的时候链表会转为红黑树的结构。也就是,在jdk1.8之前链表的长度是没有限制的,当数据增多,链表越长,hashmap的效率就会下降。在jdk1.8的时候,链表的长度限制为8,在超过8时,将链表的结构转成红黑树结构,提高效率,当然红黑树的结构也会有限制,节点数最低不能低于6个,当低于6时,会自动转为链表提高效率,这就是jdk1.8时hashMap很神奇的结构变化。

----------下面是分析时的概要理解-----------

我们都知道数据结构,却很少将结构具象化成代码,如下简单尝试一下。

ArrayList  ---> 数组 ----> Object [ ]

LinkedList --->双向链表 ---->

class Node{
  Object Data;//数据
  Node previous;//上一节点信息
  Node next;//下一节点信息
}

当然这只是我们将结构想象成java代码的样子,这段代码并不一定是对的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值