2016 - 2024

感恩一路有你

hashmap原理面试 HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash?

浏览量:1771 时间:2021-03-16 16:22:52 作者:admin

HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash?

此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。

HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。

LinkdHashSet底层怎么实现元素有序?

1.LinkedHashSet是继承HahsSet的,构造方法调用HashSet有三个参数的方法,这个构造方法底层会初始化化一个LinkedHashMap。因为LinkedHashMap是有序的,所以LinkedHashSet也是有序的。为什么这个构造方法我们不能调用,因为是包访问级别的,外部无法调用。接下来分析下LinkedHashMap是怎么实现的就明白为什么有序了。

2.可以先看下下面的图片。(手机上写的问题,不能把图片放在正文里,全部在最下面)。

LinkedHashMap的数据结构和HashMap就是Entry不一样,HashMap中的Entry有四个属性key,value,hash,next,而LinkedHashMap中的Entry添加了before和after属性,所以说LinkedHashMap是在HashMap的基础上使用了双向链表把所有节点连起来,当然还有一个头节点,所以遍历的时候可以保证有序。具体结构可以看图。

3.LinkedHashMap主要是重写了addEntry,createEntry方法来达到在创建节点的时候创建双向链表。

另外,LinkedHashMap还可以实现LRU算法的缓存。

源码是基于JDK7看的哈。如果不理解HashMap可以看我分享的另一篇文章。

希望对你有帮助,可以关注我,后续会分享更多的架构和Java知识文章。




hashmap原理面试 哈希的底层实现 hashmap的底层原理

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。