LinkedHashMap

Posted OUYM

tags:

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

1类签名与注释

public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>

哈希表和链表实现的Map接口,具有可预测的迭代次序。 这种实现不同于HashMap,它维持于所有entrys的双向链表。

此类提供了所有可选的Map操作,并允许空元素。 像HashMap,它提供了基本操作(add,containsremove)稳定的性能。

性能可能略低于HashMap ,这是由于维护链表的额外费用。但是有一个例外:LinkedHashMap的收集视图的迭代器与map的size成正比,而与容量无关。 HashMap的迭代可能更昂贵,与其容量成正比。

与HashMap一样,影响其性能的两个因素:初始容量、负载因子。但是对于LinkedHashMap来说初始容量选高一点对性能的影响不太严重,前面也说了其迭代和容量无关。

注意区别size与capacity,前者是集合里面的实际值的数量,后者是集合的容量。

请注意,此实现不同步。 如果多个线程同时访问链接的散列映射,并且至少一个线程在结构上修改映射,则必须在外部进行同步。 这通常通过在自然地封装地图的一些对象上同步来实现。 如果没有这样的对象存在,应该使用Collections.synchronizedMap方法“包装”map。 这最好在创建时完成,以防止意外的不同步访问map:

Map m = Collections.synchronizedMap(new LinkedHashMap(...)); 

该类所有集合视图方法返回的iterator方法返回的迭代器是快速失败的:如过再迭代过程中,除了迭代器的remove之外的任何方法修改了集合结构,迭代器会马上抛出一个ConcurrentModificationException异常。

(2)

 

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

LinkedHashMap 源码分析

LinkedHashMap实现LRU算法

访问 LinkedHashMap 中最后一个对象中的方法

通过比较LinkedHashMap中的值来获取密钥

Java集合详解5:深入理解LinkedHashMap和LRU缓存

LinkedHashMap与HashMap的区别