LinkedHashMap and LinkedHashSet

Posted Hesier

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinkedHashMap and LinkedHashSet相关的知识,希望对你有一定的参考价值。

LinkedHashMap实现了Map接口,是HashMap的直接子类,它同时满足HashMap和linked list的某些特性。可将LinkedHashMap看作采用linked list增强的HashMap。

LinkedHashMapHashMap的基础上,采用双向链表(doubly-linked list)的形式将所有entry连接起来,这样是为保证元素的迭代顺序跟插入顺序相同。LinkedHashMap的结构图,主体部分跟HashMap完全一样,多了header指向双向链表的头部(是一个哑元),该双向链表的迭代顺序就是entry的插入顺序。除了可以保迭代历顺序,这种结构还有一个好处:迭代LinkedHashMap时不需要像HashMap那样遍历整个table,而只需要直接遍历header指向的双向链表即可,也就是说LinkedHashMap的迭代时间就只跟entry的个数相关,而跟table的大小无关。

有两个参数可以影响LinkedHashMap的性能:初始容量(inital capacity)和负载系数(load factor)。初始容量指定了初始table的大小,负载系数用来指定自动扩容的临界值。当entry的数量超过capacity*load_factor时,容器将自动扩容并重新哈希。对于插入元素较多的场景,将初始容量设大可以减少重新哈希的次数。

LinkedHashMap是非同步的(not synchronized)。

存储结构

技术分享

 

以上是关于LinkedHashMap and LinkedHashSet的主要内容,如果未能解决你的问题,请参考以下文章

从 LinkedHashMap 对象返回键和值的顺序是不是得到保证?

手写一个 Redis LruCache 缓存机制

java.util.ConcurrentModificationException的解决办法

linkedhashmap如何输出最后几条记录

LinkedHashMap简明

搞懂 Java LinkedHashMap 源码