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代码的样子,这段代码并不一定是对的。


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页