HashMap

HashMap是Java中常用的无序键值存储结构,其底层由哈希表、链表和红黑树构成。通过key的哈希值定位元素位置,解决冲突采用拉链法,即相同哈希值的元素存储在同一链表中。当存储元素达到默认容量的75%时,HashMap会进行扩容,扩容为原来2倍。此外,HashMap允许null键和值,且存在键时,新键值会覆盖旧键值。
摘要由CSDN通过智能技术生成

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键或值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值