HashMap
作者:互联网
HashMap
hashmap底层实现:哈希表+链表+红黑树。
用key算出哈希值,用哈希值计算元素在哈希表中的位置,将元素添加到对应位置。
当有重复位置的元素加进来时,以链表的形式存储(是避免哈希冲突的解决办法,拉链法
)
拉链法:
java 标准库的 HashMap 基本上就是用拉链法实现的。拉链法的实现比较简单,将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。
实现步骤:
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