Skip to content

Commit ae0dea0

Browse files
authored
Update HashMap.md
1 parent 9e0cb80 commit ae0dea0

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

Java相关/HashMap.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@
2121
JDK1.8之前HashMap底层是<font color="red">数组和链表</font>结合在一起使用也就是<font color="red">链表散列</font>。HashMap通过key的hashCode来计算hash值,当hashCode相同时,通过<font color="red">“拉链法”</font>解决冲突。
2222

2323
所谓<font color="red">“拉链法”</font>就是:将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。
24+
2425
![jdk1.8之前的内部结构](https://user-gold-cdn.xitu.io/2018/3/20/16240dbcc303d872?w=348&h=427&f=png&s=10991)
26+
2527
简单来说,JDK1.8之前HashMap由<font color="red">数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度依然为O(1),因为最新的Entry会插入链表头部,急需要简单改变引用链即可,而对于查找操作来讲,此时就需要遍历链表,然后通过key对象的equals方法逐一比对查找.</font>
2628
### <font face="楷体" id="2.2">JDK1.8之后</font>
2729
相比于之前的版本,jdk1.8在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。

0 commit comments

Comments
 (0)