public class LinkedHashMap
extends HashMap<K, V>
implements Map<K, V>
java.lang.Object | |||
↳ | java.util.AbstractMap<K, V> | ||
↳ | java.util.HashMap<K, V> | ||
↳ | java.util.LinkedHashMap<K, V> |
Map接口的哈希表和链表实现,具有可预测的迭代顺序。 这个实现不同于HashMap ,因为它维护一个双向链接列表,它贯穿其所有条目。 这个链表定义了迭代排序,这通常是键被插入映射的顺序 ( 插入顺序 )。 请注意,如果将键重新插入到地图中,则插入顺序不受影响。 (如果m.put(k, v)在调用之前立即返回true,则调用m.put(k, v)时,将密钥k重新插入到映射m中 。)
该实施方案将客户从HashMap
(和Hashtable
)提供的未指定的通常混乱的订单中Hashtable
,而不会产生与TreeMap
相关的成本增加。 无论原始地图的实现如何,它都可用于生成与原始地图具有相同顺序的地图的副本:
void foo(Map m) { Map copy = new LinkedHashMap(m); ... }This technique is particularly useful if a module takes a map on input, copies it, and later returns results whose order is determined by that of the copy. (Clients generally appreciate having things returned in the same order they were presented.)
提供了一个特殊的constructor
来创建一个链接哈希映射,其迭代顺序是最近访问它的条目的顺序,从最近访问到最近访问顺序 。 这种地图非常适合构建LRU缓存。 调用put
, putIfAbsent
, get
, getOrDefault
, compute
, computeIfAbsent
, computeIfPresent
,或merge
中的相应条目的接入方法的结果(假设调用完成后它存在)。 如果替换值,则replace
方法只会导致对条目的访问。 putAll
方法为指定映射中的每个映射生成一个条目访问权,按指定映射的条目集迭代器提供键值映射的顺序。 没有其他方法生成入口访问。 特别是,收集视图的操作不会影响后台映射的迭代顺序。 *
可能会覆盖 removeEldestEntry(Map.Entry)
方法,以强制在新映射添加到地图时自动删除过时映射的策略。
该类提供所有可选的Map操作,并允许空元素。 像HashMap,它提供了基本操作(add,contains remove和)稳定的性能,假定散列函数散桶中适当的元件。 由于增加了维护链表的费用,性能可能仅略低于HashMap的性能,但有一个例外:对LinkedHashMap的收集视图的迭代需要时间与地图大小成比例,而不管其容量。 迭代HashMap可能会更昂贵,需要的时间与其容量成正比。
链接哈希映射有两个影响其性能的参数: 初始容量和负载因子 。 它们的定义与HashMap完全相同 。 但是请注意,对于此类,初始容量选择过高值的惩罚不如HashMap严重,因为此类的迭代时间不受容量影响。
请注意,此实现不同步。 如果多个线程同时访问链接的哈希映射,并且至少有一个线程在结构上修改了映射,则它必须在外部同步。 这通常是通过在自然封装地图的某个对象上进行同步来完成的。 如果不存在这样的对象,则应该使用Collections.synchronizedMap
方法“映射”地图。 这最好在创建时完成,以防止意外的不同步访问地图:
Map m = Collections.synchronizedMap(new LinkedHashMap(...));A structural modification is any operation that adds or deletes one or more mappings or, in the case of access-ordered linked hash maps, affects iteration order. In insertion-ordered linked hash maps, merely changing the value associated with a key that is already contained in the map is not a structural modification. In access-ordered linked hash maps, merely querying the map with get is a structural modification.)
由所有此类的集合视图方法返回的集合的iterator方法返回的迭代器快速失败 :如果在迭代器创建后的任何时候,结构性地修改映射,除了通过迭代器自己的remove方法之外,迭代器将抛出一个ConcurrentModificationException
。 因此,面对并发修改,迭代器快速而干净地失败,而不是在将来某个未确定的时间冒着任意的,非确定性的行为风险。
请注意,迭代器的故障快速行为无法得到保证,因为一般来说,在存在非同步并发修改的情况下不可能做出任何硬性保证。 失败快速迭代器在尽力而为的基础上抛出ConcurrentModificationException 。 因此,编写一个依赖于此异常的程序是正确的: 迭代器的快速失败行为应仅用于检测错误。
由该类的所有集合视图方法返回的集合的分割器方法返回的分割器为 late-binding , 快速失败并另外报告 ORDERED
。
本课是 Java Collections Framework的成员。
也可以看看:
Public constructors |
|
---|---|
LinkedHashMap(int initialCapacity, float loadFactor) 使用指定的初始容量和加载因子构造一个空的插入订单实例 LinkedHashMap 。 |
|
LinkedHashMap(int initialCapacity) 使用指定的初始容量和默认加载因子(0.75)构造一个空插入订单的 LinkedHashMap实例。 |
|
LinkedHashMap() 使用默认的初始容量(16)和加载因子(0.75)构造一个空插入订单的 LinkedHashMap实例。 |
|
LinkedHashMap(Map<? extends K, ? extends V> m) 使用与指定映射相同的映射构造插入顺序 LinkedHashMap实例。 |
|
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) 用指定的初始容量,加载因子和排序模式构造一个空的 LinkedHashMap实例。 |
Public methods |
|
---|---|
void |
clear() 从此映射中移除所有映射。 |
boolean |
containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true 。 |
void |
forEach(BiConsumer<? super K, ? super V> action) 对此映射中的每个条目执行给定操作,直到处理完所有条目或操作抛出异常为止。 |
V |
get(Object key) 返回指定键映射到的值,或者如果此映射不包含键映射,则返回 |
void |
replaceAll(BiFunction<? super K, ? super V, ? extends V> function) 用对该条目调用给定函数的结果替换每个条目的值,直到处理完所有条目或者该函数抛出异常。 |
Protected methods |
|
---|---|
boolean |
removeEldestEntry(Entry<K, V> eldest) |
Inherited methods |
|
---|---|
From class java.util.HashMap
|
|
From class java.util.AbstractMap
|
|
From class java.lang.Object
|
|
From interface java.util.Map
|
LinkedHashMap (int initialCapacity, float loadFactor)
使用指定的初始容量和加载因子构造一个空插入订购的实例 LinkedHashMap实例。
Parameters | |
---|---|
initialCapacity |
int : the initial capacity |
loadFactor |
float : the load factor |
Throws | |
---|---|
IllegalArgumentException |
if the initial capacity is negative or the load factor is nonpositive |
LinkedHashMap (int initialCapacity)
使用指定的初始容量和默认加载因子(0.75)构造一个空插入订单 LinkedHashMap实例。
Parameters | |
---|---|
initialCapacity |
int : the initial capacity |
Throws | |
---|---|
IllegalArgumentException |
if the initial capacity is negative |
LinkedHashMap ()
使用默认初始容量(16)和加载因子(0.75)构造一个空插入订单的 LinkedHashMap实例。
LinkedHashMap (Map<? extends K, ? extends V> m)
使用与指定映射相同的映射构造插入顺序LinkedHashMap实例。 LinkedHashMap实例是使用默认加载因子(0.75)和足以在指定映射中保存映射的初始容量创建的。
Parameters | |
---|---|
m |
Map : the map whose mappings are to be placed in this map |
Throws | |
---|---|
NullPointerException |
if the specified map is null |
LinkedHashMap (int initialCapacity, float loadFactor, boolean accessOrder)
用指定的初始容量,加载因子和排序模式构造一个空的 LinkedHashMap实例。
Parameters | |
---|---|
initialCapacity |
int : the initial capacity |
loadFactor |
float : the load factor |
accessOrder |
boolean : the ordering mode - true for access-order, false for insertion-order |
Throws | |
---|---|
IllegalArgumentException |
if the initial capacity is negative or the load factor is nonpositive |
boolean containsValue (Object value)
如果此映射将一个或多个键映射到指定值,则返回 true 。
Parameters | |
---|---|
value |
Object : value whose presence in this map is to be tested |
Returns | |
---|---|
boolean |
true if this map maps one or more keys to the specified value |
void forEach (BiConsumer<? super K, ? super V> action)
对此映射中的每个条目执行给定操作,直到处理完所有条目或操作抛出异常为止。 除非实现类另有规定,否则按照条目集迭代的顺序执行操作(如果指定了迭代顺序)。操作抛出的异常会中继给调用者。
Parameters | |
---|---|
action |
BiConsumer : The action to be performed for each entry |
V get (Object key)
返回指定键映射到的值 null
如果此映射不包含键映射,则返回 null
。
更正式地说,如果这个映射包含从键k
到值v
的映射,例如(key==null ? k==null : key.equals(k))
,则该方法返回v
; 否则返回null
。 (最多可以有一个这样的映射。)
返回值null
不一定表示映射不包含该键的映射; 地图也可能明确将密钥映射到null
。 containsKey
操作可用于区分这两种情况。
Parameters | |
---|---|
key |
Object : the key whose associated value is to be returned |
Returns | |
---|---|
V |
the value to which the specified key is mapped, or null if this map contains no mapping for the key |
void replaceAll (BiFunction<? super K, ? super V, ? extends V> function)
用对该条目调用给定函数的结果替换每个条目的值,直到处理完所有条目或者该函数抛出异常。 函数抛出的异常会传递给调用者。
Parameters | |
---|---|
function |
BiFunction : the function to apply to each entry |
boolean removeEldestEntry (Entry<K, V> eldest)
Parameters | |
---|---|
eldest |
Entry
|
Returns | |
---|---|
boolean |