909422229_HashMap实现原理,利用数组和链表存储元素

HashMap实现原理,利用数组和链表存储元素

必备面试题,必考项目之一,整理了一下发出来。

hashmap底层:
        1.底层数组+链表实现,可以存储null键和null值,线程不安全。
          HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。
          数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。
          put方法:添加元素的时候会判断是否存在相同的hashcode和相同的key元素,如果存在相同的hash和相同的key,则新值覆盖老值,返回旧值。反之产生hash冲突,链表解决。


链表如何解决hash冲突?

如图所示:

每个entry中有key、value(键值对),next(指向下一个Entry)。放入位置算法:key.hashcode % 数组的长度。
位置下标由key的哈希值对数组的长度取模得到

​​​​​​
        答:链地址法,为了解决冲突,一个hash中存放的链表,元素的实际位置在数组的链表上,所以相同hashCode的不同元素可以存储在同一位置。

key:put方法的key。

value:put方法的value。

next:因为存在相同的hashcode,不同的key,所以next是下一个entry的地址,也就是位置。 

如何解决了您的问题,还希望来JAVA WEB开发交流群:958923746,有问题欢迎共享,共同提升!
        

 

添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

75888丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值