0
点赞
收藏
分享

微信扫一扫

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


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

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

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

链表如何解决hash冲突?

如图所示:

_HashMap实现原理,利用数组和链表存储元素_数据结构

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

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

key:put方法的key。

value:put方法的value。

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

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

 

举报

相关推荐

0 条评论