K
-钥匙的Map保持型
V
-映射的值的类型
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
哈希表和相关的Map接口列表实现,具有可预测的迭代顺序。这不同于HashMap实施,它维护了一个链表贯穿其所有作品。这个链表定义迭代顺序,通常的顺序钥匙插入Map(插入顺序)。注意插入顺序不是关键是重新插入到Map的影响。(一个关键k重新插入到Mapm如果m.put(k, v)时调用将返回true m.containsKey(k)立即调用。之前)
这个实现备件客户从指定,一般混沌序提供HashMap
(和Hashtable
),而不承担增加的成本与TreeMap
。它可以被用来产生一个具有相同的顺序为原来的Map的副本,无论原来的Map的实施:
void foo(图m){Map复制=新LinkedHashMap(M);…}这种技术如果一个模块的输入,需要一份Map是特别有用的,后来返回结果的顺序是:确定的副本。(客户一般喜欢有东西返回的顺序一样了。)
一个特殊的constructor
提供创建链接的哈希映射的迭代是为了在该条目最后访问,从最近最少访问最近(存取顺序)。这种Map是非常适合于构建LRU缓存。调用put
,putIfAbsent
,get
,getOrDefault
,compute
,computeIfAbsent
,computeIfPresent
,或访问相应的条目merge
方法结果(假设它存在的调用完成后)。的replace
方法只能导致入口访问如果值代替。的putAll
方法在指定的Map生成每个映射一个入口进入,按关键值的映射是由指定的Map的进入提供了迭代器。没有其他方法生成入口访问。尤其在集合视图操作做不影响的支持Map迭代顺序。
的removeEldestEntry(Map.Entry)
重写方法征收政策去除陈旧的映射时自动添加新的映射图。
这个类提供了所有可选的Map操作,并允许null元素。像HashMap,它的基本运算提供了稳定的性能(add,contains和remove),假设哈希函数的适当分散元素在水桶。性能可能会略低于HashMap,由于维护链表的附加费用,但有一个例外:在一LinkedHashMap收集意见迭代需要Map的大小比例时,无论其能力。在HashMap迭代可能是昂贵的,需要时间来容量比例。
链接的哈希映射的两个参数影响它的性能:初始容量和负载因子。他们是精确的定义为HashMap。注意,然而,选择初始能力值过高的惩罚是不太严重的这类HashMap相比,对于这类迭代次数不受力。
请注意,此实现不同步。如果多个线程访问链接的哈希映射的同时,并至少有一个线程修改Map的结构,它必须是同步的外部。这通常是通过同步的一些对象,自然将Map完成。如果该对象不存在,Map应该是“包裹”使用Collections.synchronizedMap
方法。最好的做法是在创建时,防止意外的非同步访问的Map:
MapM =集合。synchronizedmap(新LinkedHashMap(…));结构修改的任何操作,添加或删除一个或多个映射,在接入情况下有序联系哈希映射,影响迭代顺序。在插入有序的链接哈希映射中,仅仅改变与已经包含在Map中的一个关键的值不是一个结构修改。 在访问命令链接的哈希映射,只是查询Mapget是结构上的修改。)
通过对收集的iterator方法返回的迭代器的所有这类的集合视图的方法返回的是快速失败:如果Map的结构修改,迭代器创建后的任何时间,以任何方式除了通过迭代器的remove方法,迭代器将抛出一个ConcurrentModificationException
。因此,在并发修改的面前,迭代器失败迅速和干净,而不是冒着任意的,非确定性的行为在未来的一个不确定的时间。
注意迭代器不能快速失败行为得到保证的话,一般来说,不可能在不同步的并发修改的存在作出难以保证。快速失败迭代器扔ConcurrentModificationException尽最大努力的基础上。因此,要写一个程序,依靠这一例外的正确性错误:快速失败迭代器的行为只能用来检测错误。
的spliterators返回集合的spliterator法所有这类的集合视图的方法返回的是后期绑定,快速失败,并报告Spliterator.ORDERED
。
这个班的一员 Java Collections Framework。
Object.hashCode()
,
Collection
,
Map
,
HashMap
,
TreeMap
,
Hashtable
,
Serialized Form
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
Constructor and Description |
---|
LinkedHashMap()
构造一个空的插入命令
LinkedHashMap实例的默认初始容量(16)和负载因子(0.75)。
|
LinkedHashMap(int initialCapacity)
构造一个空的插入命令
LinkedHashMap实例与指定的初始容量和加载因子(0.75)。
|
LinkedHashMap(int initialCapacity, float loadFactor)
构造一个空的插入命令
LinkedHashMap实例与指定的初始容量和加载因子。
|
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
构造一个空
LinkedHashMap实例与指定的初始容量,负载因子和订购模式。
|
LinkedHashMap(Map<? extends K,? extends V> m)
构建了一个插入命令
LinkedHashMap实例具有相同的映射为指定的Map。
|
Modifier and Type | Method and Description |
---|---|
void |
clear()
从这个映射中移除所有的映射。
|
boolean |
containsValue(Object value)
返回
true如果映射到指定的值的一个或多个键。
|
Set<Map.Entry<K,V>> |
entrySet()
返回一个
Set 映射的视图包含在这个Map。
|
void |
forEach(BiConsumer<? super K,? super V> action)
在该映射中的每个条目执行给定的操作,直到所有的条目被处理或操作抛出异常。
|
V |
get(Object key)
返回指定的键映射的值,或
null 如果这个Map不包含的键映射。
|
V |
getOrDefault(Object key, V defaultValue)
返回指定的键映射的值,或
defaultValue 如果这个Map不包含的键映射。
|
Set<K> |
keySet()
返回一个
Set 查看键包含在这个Map。
|
protected boolean |
removeEldestEntry(Map.Entry<K,V> eldest)
返回
true如果这Map应该将其长子的入口。
|
void |
replaceAll(BiFunction<? super K,? super V,? extends V> function)
将每个条目的值替换为在该项上调用给定函数的结果,直到所有的条目都被处理或函数抛出异常。
|
Collection<V> |
values()
返回一个
Collection 的价值观包含在这个Map。
|
clone, compute, computeIfAbsent, computeIfPresent, containsKey, isEmpty, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, size
equals, hashCode, toString
finalize, getClass, notify, notifyAll, wait, wait, wait
compute, computeIfAbsent, computeIfPresent, containsKey, equals, hashCode, isEmpty, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, size
public LinkedHashMap(int initialCapacity, float loadFactor)
initialCapacity
-初始容量
loadFactor
-负荷系数
IllegalArgumentException
如果初始容量为负或负载因子是负的
public LinkedHashMap(int initialCapacity)
initialCapacity
-初始容量
IllegalArgumentException
-如果初始容量负
public LinkedHashMap()
public LinkedHashMap(Map<? extends K,? extends V> m)
m
的映射被放置在这个Map的Map
NullPointerException
-如果指定的Map是空的
public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
initialCapacity
-初始容量
loadFactor
-负荷系数
accessOrder
-订购模式访问顺序
true,插入顺序
false
IllegalArgumentException
如果初始容量为负或负载因子是负的
public boolean containsValue(Object value)
containsValue
接口
Map<K,V>
containsValue
方法重写,继承类
HashMap<K,V>
value
-它的存在价值进行测试
public V get(Object key)
null
如果这个Map不包含的键映射。
更正式地说,如果这个图中包含了从关键k
到价值v
这样(key==null ? k==null : key.equals(k))
映射,那么这个方法返回v
;否则返回null
。(最多只能有一个这样的映射。)
一个null
返回值不必要地表明Map不包含的键映射;也有可能是Map明确地映射到null
关键。的containsKey
操作可用于区分这两例。
public V getOrDefault(Object key, V defaultValue)
defaultValue
如果这个Map不包含的键映射。
getOrDefault
接口
Map<K,V>
getOrDefault
方法重写,继承类
HashMap<K,V>
key
-关键的相关值被返回
defaultValue
-键的默认映射
defaultValue
如果这个Map不包含的键映射
public void clear()
protected boolean removeEldestEntry(Map.Entry<K,V> eldest)
使用:这个覆盖将允许Map成长到100个条目,然后删除大条目,每次添加一个新的条目,保持100个条目的稳定状态。
私有静态最后max_entries = 100;保护布尔removeEldestEntry(map.entry长子){返回size() > max_entries;}
这种方法通常不以任何方式修改Map,而是允许Map以它的返回值来修改自己的方向。它是这种方法修改Map直接允许的,但如果真的如此,它必须返回false(说明Map不应该尝试任何进一步的修改)。回归后的影响true在该方法修改Map是不确定的。
这个实现仅仅返回false(所以这Map的行为像一个正常的Map最大的元素是永远不会被删除)。
eldest
-最近插入的入口在Map,或如果这是一个访问点Map,最近最少访问的入口。这是一项将被删除,这个方法返回
true。如果Map是空的
put或
putAll调用导致调用之前,这将是进入只是插入;换句话说,如果图中包含一个条目,大条目也是新的。
public Set<K> keySet()
Set
的关键视图包含在这个Map。该集合是由Map的支持,所以对Map的变化反映在集合中,反之亦然。如果Map是在设置一个迭代过程中修改(除非通过迭代器的
remove操作),迭代的结果是不确定的。设置支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Set.remove,
removeAll,
retainAll,和
clear操作。它不支持
add或
addAll操作。其
Spliterator
通常提供更快的时序性能却比
HashMap
穷得多的并行性能。
public Collection<V> values()
Collection
视图的值包含在这个Map。集合是由Map支持的,所以对Map的变化反映在集合中,反之亦然。如果Map是在集合的迭代进行修改(除非通过迭代器的
remove操作),迭代的结果是不确定的。收集支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Collection.remove,
removeAll,
retainAll和
clear操作。它不支持
add或
addAll操作。其
Spliterator
通常提供更快的时序性能却比
HashMap
穷得多的并行性能。
public Set<Map.Entry<K,V>> entrySet()
Set
视图的映射包含在这个Map。该集合是由Map的支持,所以对Map的变化反映在集合中,反之亦然。如果Map是在设置一个迭代过程中修改(除非通过迭代器的
remove操作,或通过
setValue操作返回的迭代器的映射项)的迭代的结果是不确定的。设置支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Set.remove,
removeAll,
retainAll和
clear操作。它不支持
add或
addAll操作。其
Spliterator
通常提供更快的时序性能却比
HashMap
穷得多的并行性能。
public void forEach(BiConsumer<? super K,? super V> action)
Map
public void replaceAll(BiFunction<? super K,? super V,? extends V> function)
Map
replaceAll
接口
Map<K,V>
replaceAll
方法重写,继承类
HashMap<K,V>
function
-功能适用于每一个条目
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.