其他分享
首页 > 其他分享> > HashMap

HashMap

作者:互联网

HashMap

hashmap底层实现:哈希表+链表+红黑树。

用key算出哈希值,用哈希值计算元素在哈希表中的位置,将元素添加到对应位置。

当有重复位置的元素加进来时,以链表的形式存储(是避免哈希冲突的解决办法,拉链法)

拉链法:

java 标准库的 HashMap 基本上就是用拉链法实现的。拉链法的实现比较简单,将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。

img

实现步骤:

​ 1、 得到一个key

​ 2、 计算key的HashValue

​ 3、 根据HashValue值定位到data[hashValue] 。( data[hashValue] 是一条链表)

​ 4、 若data[hashValue] 为空,则直接插入。

​ 5、 不然则添加到链表末尾。


哈希表的默认长度为16,负载因子为0.75.

它底层的扩容机制是每当存储了3/4的元素后就会开始扩容,每次触发扩容机制时,扩容为原来的2倍。
当然也可以使用构造方法来指定存储长度以及负载因子的值。

在此之前提到的HashSet的底层就是HashMap。

hashmap是无序的(不按照添加顺序进行排序的);而且底层有hashcode()方法以及equals() 方法来进行判断的,避免存入重复的键。

注意:当出现重复的键时,后面出现的键的值会将前面的值覆盖掉。

hashmap允许存入null键或值。

标签:hashmap,拉链,哈希,链表,key,HashMap
来源: https://blog.csdn.net/m0_53679492/article/details/121265533