K
-钥匙的Map保持型
V
-映射的值的类型
public interface Map<K,V>
这个接口的Dictionary类的地方,这完全是一个抽象类而不是接口。
的Map接口提供了三集合视图,使Map的内容被看作是一套钥匙,收藏价值,或一组关键值的映射。Map的秩序定义为顺序,对Map的集合视图迭代器返回的元素。一些Map的实现,像TreeMap类,使特定的保证他们的订单;其他人,像HashMap类,不。
注意:必须非常小心行使如果使用可变对象作为map的key。一个Map的行为不是一个对象的值是以影响equals比较而对象在Map的关键改变指定。这一禁令的一个特殊情况是,它是不允许的Map包含本身作为一个关键。而对于map以自身作为值是允许的,极端的谨慎建议:“equals和hashCode方法的Map上不再明确。
所有的通用Map实现类提供了两个“标准”的构造函数:void(无参数)的构造函数,创建一个空的Map,和一个带有一个参数的类型Map构造函数,创建具有相同键的值映射为论证新Map。实际上,后者的构造函数允许用户复制任何Map,产生所需的类的等效映射。没有办法执行这一建议(因为接口不包含构造器)但所有JDK中的通用图实现均。
“破坏性”的方法包含在这个界面,即方法,修改其操作Map,规定如果这个Map不支持操作把UnsupportedOperationException。如果是这样的话,这些方法可以,但不要求,如果调用会抛出一个UnsupportedOperationExceptionMap没有影响。例如,调用putAll(Map)
法以不可修改的Map,但不要求,引发异常,如果其映射的Map是“叠加”是空的。
一些Map实现对它们可能包含的键和值的限制。例如,一些实现禁止空键和值,并且一些实现对它们的键的类型有限制。试图插入一个不合适的键或值将抛出未检查异常,通常NullPointerException或ClassCastException。试图查询一个不合适的key或值的存在可能会抛出一个异常,也可能返回false;有些实现会表现出以前的行为和表现出后者。更普遍的是,试图在一个不合格的操作键或值的完成将不会导致一个不合格的元件插入Map可能会抛出一个异常,也可能是成功的,在实施期权。这样的异常被标记为“可选”在该接口的规范中。
在集合框架接口的方法很多,在equals
方法定义。例如,对于containsKey(Object key)
方法的规范说:“返回true当且仅当这个图中包含了一个关键的k这样(key==null ? k==null : key.equals(k))映射”。本规范应不被解释为意味着调用Map.containsKey具有非空参数key会造成key.equals(k)是任何关键k调用。实现免费实施优化,equals调用是可以避免的,例如,通过比较两个密钥的散列码。(这Object.hashCode()
规范保证两不等哈希代码的对象不能等同。)更普遍的是,不同的集合框架接口的实现可以利用指定的行为标的Object
方法实现者认为适当的地方。
一些执行递归遍历Map的Map操作可能会失败,异常为自我参照的情况下,Map直接或间接包含本身。这包括clone()
,equals()
,hashCode()
和toString()
方法。实现可能有选择地处理自引用的情况,但是大多数当前实现不这样做。
该接口的 Java Collections Framework成员。
Modifier and Type | Interface and Description |
---|---|
static interface |
Map.Entry<K,V>
Map输入(键-值对)。
|
Modifier and Type | Method and Description |
---|---|
void |
clear()
从这个映射中移除所有的映射(可选操作)。
|
default V |
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
试图计算出指定键和当前的映射值的映射(或
null 如果没有当前映射)。
|
default V |
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
如果指定的键是不是已经与价值相关的(或映射到
null ),尝试使用给定的映射功能,进入到这个Map除非
null 计算其价值。
|
default V |
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
如果指定键的值是存在和非空的,尝试计算一个新的映射,给出了键和它当前的映射值。
|
boolean |
containsKey(Object key)
返回
true如果这Map包含一个指定的键映射。
|
boolean |
containsValue(Object value)
返回
true如果映射到指定的值的一个或多个键。
|
Set<Map.Entry<K,V>> |
entrySet()
返回一个
Set 视图的映射包含在这个Map。
|
boolean |
equals(Object o)
将指定的对象与此映射的相等性进行比较。
|
default void |
forEach(BiConsumer<? super K,? super V> action)
在该映射中的每个条目执行给定的操作,直到所有的条目被处理或操作抛出异常。
|
V |
get(Object key)
返回指定的键映射的值,或
null 如果这个Map不包含的键映射。
|
default V |
getOrDefault(Object key, V defaultValue)
返回指定的键映射的值,或
defaultValue 如果这个Map不包含的键映射。
|
int |
hashCode()
返回此映射的哈希代码值。
|
boolean |
isEmpty()
返回
true如果这个Map不包含键值的映射。
|
Set<K> |
keySet()
返回一个
Set 的关键视图包含在这个Map。
|
default V |
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
如果指定的键已与值相关联的值或与空值相关联的,则将其与给定的非空值关联。
|
V |
put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
|
void |
putAll(Map<? extends K,? extends V> m)
从指定的映射到这个Map(可选操作)复制所有的映射。
|
default V |
putIfAbsent(K key, V value)
如果指定的键是不是已经与价值相关的(或映射到
null )将其与给定的值并返回
null ,否则返回当前值。
|
V |
remove(Object key)
如果存在(可选操作),则从该Map中移除一个键的映射。
|
default boolean |
remove(Object key, Object value)
仅当它当前映射到指定的值时,为指定的键移除条目。
|
default V |
replace(K key, V value)
仅当它当前映射到某一值时,替换指定的键的条目。
|
default boolean |
replace(K key, V oldValue, V newValue)
仅当当前映射到指定的值时,替换指定的键的条目。
|
default void |
replaceAll(BiFunction<? super K,? super V,? extends V> function)
将每个条目的值替换为在该项上调用给定函数的结果,直到所有的条目都被处理或函数抛出异常。
|
int |
size()
返回这个映射中的键值映射的数目。
|
Collection<V> |
values()
返回一个
Collection 视图的值包含在这个Map。
|
int size()
boolean isEmpty()
boolean containsKey(Object key)
key
键的存在,在这张Map上可以进行测试
ClassCastException
如果关键是这张图的不恰当的类型(
optional)
NullPointerException
-如果指定的键是无效的,这张Map不允许null键(
optional)
boolean containsValue(Object value)
value
-它的存在价值进行测试
ClassCastException
-如果值是此Map不合适的类型(
optional)
NullPointerException
-如果指定的值为空,这张Map不允许空值(
optional)
V get(Object key)
null
如果这个Map不包含的键映射。
更正式地说,如果这个图中包含了从关键k
到价值v
这样(key==null ? k==null : key.equals(k))
映射,那么这个方法返回v
;否则返回null
。(最多只能有一个这样的映射。)
如果Map允许空值,那么一个null
返回值不必要地表明Map不包含的键映射;也有可能是Map明确地映射到null
的关键,containsKey
操作可用于区分这两例。
key
-关键的相关值被返回
null
如果这个Map不包含的键映射
ClassCastException
如果关键是这张图的不恰当的类型(
optional)
NullPointerException
-如果指定的键是无效的,这张Map不允许null键(
optional)
V put(K key, V value)
m.containsKey(k)
将返回
true。)
key
键与指定的值是相关联的
value
值必须与指定键关联
UnsupportedOperationException
-如果
put操作不该Map支持
ClassCastException
如果类指定的键或值防止它被存储在这个Map
NullPointerException
-如果指定的键或值为空,这张Map不允许null键或值
IllegalArgumentException
如果一些属性指定的键或值防止它被存储在这个Map
V remove(Object key)
(key==null ? k==null : key.equals(k))
映射,映射被删除。(Map最多只能包含一个这样的映射。)
回到这个Map以前相关的关键字的值,或null如果Map中没有包含的键映射。
如果Map允许空值,那么一个null返回值不必要地表明Map中没有包含的键映射;也有可能是Map明确地映射到null关键。
一旦调用返回的映射将不包含指定的键的映射。
key
键的映射是从Map上移除
UnsupportedOperationException
-如果
remove操作不该Map支持
ClassCastException
如果关键是这张图的不恰当的类型(
optional)
NullPointerException
-如果指定的键是无效的,这张Map不允许null键(
optional)
void putAll(Map<? extends K,? extends V> m)
put(k, v)
这Map上的每一次关键
k映射中指定的值
v。当操作正在进行中时,此操作的行为是未定义的,如果指定的映射被修改的。
m
映射被存储在这个Map
UnsupportedOperationException
-如果
putAll操作不该Map支持
ClassCastException
-如果指定Map的键或值班防止它被存储在这个Map
NullPointerException
-如果指定的映射是零,或者如果这个Map不允许null键或值,并指定Map包含null键或值
IllegalArgumentException
-如果指定Map键和值的一些性质防止它被存储在这个Map
void clear()
UnsupportedOperationException
-如果
clear操作不该Map支持
Set<K> keySet()
Set
的关键视图包含在这个Map。该集合是由Map的支持,所以对Map的变化反映在集合中,反之亦然。如果Map是在设置一个迭代过程中修改(除非通过迭代器的
remove操作),迭代的结果是不确定的。设置支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Set.remove,
removeAll,
retainAll,和
clear操作。它不支持
add或
addAll操作。
Collection<V> values()
Collection
的价值观包含在这个Map。集合是由Map支持的,所以对Map的变化反映在集合中,反之亦然。如果Map是在集合的迭代进行修改(除非通过迭代器的
remove操作),迭代的结果是不确定的。收集支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Collection.remove,
removeAll,
retainAll和
clear操作。它不支持
add或
addAll操作。
Set<Map.Entry<K,V>> entrySet()
Set
映射的视图包含在这个Map。该集合是由Map的支持,所以对Map的变化反映在集合中,反之亦然。如果Map是在设置一个迭代过程中修改(除非通过迭代器的
remove操作,或通过
setValue操作返回的迭代器的映射项)的迭代的结果是不确定的。设置支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Set.remove,
removeAll,
retainAll和
clear操作。它不支持
add或
addAll操作。
boolean equals(Object o)
equals
方法重写,继承类
Object
o
对象进行比较,这张Map的平等
Object.hashCode()
,
HashMap
int hashCode()
Object.hashCode()
一般合同要求。
hashCode
方法重写,继承类
Object
Map.Entry.hashCode()
,
Object.equals(Object)
,
equals(Object)
default V getOrDefault(Object key, V defaultValue)
defaultValue
如果这个Map不包含的键映射。
key
-关键的相关值被返回
defaultValue
-键的默认映射
defaultValue
如果这个Map不包含的键映射
ClassCastException
如果关键是这张图的不恰当的类型(
optional)
NullPointerException
-如果指定的键是无效的,这张Map不允许null键(
optional)
default void forEach(BiConsumer<? super K,? super V> action)
map
:
for (Map.Entry<K, V> entry : map.entrySet())
action.accept(entry.getKey(), entry.getValue());
默认实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。
action
将每项执行的动作
NullPointerException
-如果指定动作是无效的
ConcurrentModificationException
如果找到条目被删除在迭代
default void replaceAll(BiFunction<? super K,? super V,? extends V> function)
默认的实现是等效的,这map
:
for (Map.Entry<K, V> entry : map.entrySet())
entry.setValue(function.apply(entry.getKey(), entry.getValue()));
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。
function
-功能适用于每一个条目
UnsupportedOperationException
-如果
set
操作不该Map的输入迭代器支持集。
ClassCastException
如果替换值类防止它被存储在这个Map
NullPointerException
-如果指定函数为空,或指定的替换值是null,这Map不允许空值
ClassCastException
如果替换值是此Map不合适的类型(
optional)
NullPointerException
如果函数或替换值是null,这Map不允许null键或值(
optional)
IllegalArgumentException
如果替换值的一些性质防止它被存储在这个Map(
optional)
ConcurrentModificationException
如果找到条目被删除在迭代
default V putIfAbsent(K key, V value)
null
)将其与给定的值并返回
null
,否则返回当前值。
map
:
V v = map.get(key);
if (v == null)
v = map.put(key, value);
return v;
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。
key
键与指定的值是相关联的
value
值必须与指定键关联
null
如果没有键映射。(一
null
返回也表明,与先前的
null
Map的关键,如果实施支持空值。)
UnsupportedOperationException
-如果
put
操作不该Map支持(
optional)
ClassCastException
如果键或值是此Map不合适的类型(
optional)
NullPointerException
-如果指定的键或值是null,这Map不允许null键或值(
optional)
IllegalArgumentException
如果一些属性指定的键或值防止它被存储在这个Map(
optional)
default boolean remove(Object key, Object value)
map
:
if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
map.remove(key);
return true;
} else
return false;
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。
key
键与指定值相关联的
value
值将与指定键关联
true
如果值被删除
UnsupportedOperationException
-如果
remove
操作不该Map支持(
optional)
ClassCastException
如果键或值是此Map不合适的类型(
optional)
NullPointerException
-如果指定的键或值是null,这Map不允许null键或值(
optional)
default boolean replace(K key, V oldValue, V newValue)
map
:
if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
map.put(key, newValue);
return true;
} else
return false;
默认实现不把Map不支持空值,如果属性的旧值是null除非价值也为空时。
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。
key
键与指定值相关联的
oldValue
值将与指定键关联
newValue
值
true
如果值代替
UnsupportedOperationException
-如果
put
操作不该Map支持(
optional)
ClassCastException
如果类指定的键或值,防止它被存储在这个Map
NullPointerException
-如果指定的键或价值是零,这张Map不允许null键或值
NullPointerException
-如果属性的旧值是无效的,这张Map不允许空值(
optional)
IllegalArgumentException
如果一些属性指定的键或值,防止它被存储在这个Map
default V replace(K key, V value)
map
:
if (map.containsKey(key)) {
return map.put(key, value);
} else
return null;
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。
key
键与指定值相关联的
value
值必须与指定键关联
null
如果没有键映射。(一
null
返回也表明,与先前的
null
Map的关键,如果实施支持空值。)
UnsupportedOperationException
-如果
put
操作不该Map支持(
optional)
ClassCastException
如果类指定的键或值防止它被存储在这个Map(
optional)
NullPointerException
-如果指定的键或值是null,这Map不允许null键或值
IllegalArgumentException
如果一些属性指定的键或值防止它被存储在这个Map
default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
null
),尝试使用给定的映射功能,进入到这个Map除非
null
计算其价值。
如果函数返回null
没有映射记录。如果函数抛出一个(没有)异常,异常会被重新抛出,没有映射记录。最常见的用法是构造一个新对象作为初始映射值或memoized的结果,如:
map.computeIfAbsent(key, k -> new Value(f(k)));
或者为了实现多值映射,Map<K,Collection<V>>
,支持一键多值:
map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
map
步骤,然后返回电流值或
null
如果现在缺席:
if (map.get(key) == null) {
V newValue = mappingFunction.apply(key);
if (newValue != null)
map.put(key, newValue);
}
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。特别是,所有接口的实现必须ConcurrentMap
文件函数是否是应用一次原子只有价值是不存在的。
key
键与指定的值是相关联的
mappingFunction
的函数来计算一个值
NullPointerException
-如果指定的键是无效的,这张Map不支持null键,或映射函数是空的
UnsupportedOperationException
-如果
put
操作不该Map支持(
optional)
ClassCastException
如果类指定的键或值防止它被存储在这个Map(
optional)
default V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
如果函数返回null
,映射被删除。如果函数抛出一个(没有)异常,异常会被重新抛出,和当前映射保持不变。
map
步骤,然后返回电流值或
null
如果现在缺席:
if (map.get(key) != null) {
V oldValue = map.get(key);
V newValue = remappingFunction.apply(key, oldValue);
if (newValue != null)
map.put(key, newValue);
else
map.remove(key);
}
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。特别是,所有接口的实现必须ConcurrentMap
文件函数是否是应用一次原子只有价值是不存在的。
key
键与指定的值是相关联的
remappingFunction
的函数来计算一个值
NullPointerException
-如果指定的键是无效的,这张Map不支持null键,或remappingfunction是空的
UnsupportedOperationException
-如果
put
操作不该Map支持(
optional)
ClassCastException
如果类指定的键或值防止它被存储在这个Map(
optional)
default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
null
如果没有当前映射)。例如,可以创建或追加
String
味精到值的映射:
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(方法
merge()
往往更容易使用等目的。)
如果函数返回null
,映射被删除(或没有如果当初缺席)。如果函数抛出一个(没有)异常,异常会被重新抛出,和当前映射保持不变。
map
步骤,然后返回电流值或
null
如果缺席:
V oldValue = map.get(key);
V newValue = remappingFunction.apply(key, oldValue);
if (oldValue != null ) {
if (newValue != null)
map.put(key, newValue);
else
map.remove(key);
} else {
if (newValue != null)
map.put(key, newValue);
else
return null;
}
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。特别是,所有接口的实现必须ConcurrentMap
文件函数是否是应用一次原子只有价值是不存在的。
key
键与指定的值是相关联的
remappingFunction
的函数来计算一个值
NullPointerException
-如果指定的键是无效的,这张Map不支持null键,或remappingfunction是空的
UnsupportedOperationException
-如果
put
操作不该Map支持(
optional)
ClassCastException
如果类指定的键或值防止它被存储在这个Map(
optional)
default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
null
。此方法可以将多个映射值组合在一个键时使用。例如,可以创建或追加
String msg
到值的映射:
map.merge(key, msg, String::concat)
如果函数返回null
映射被删除。如果函数抛出一个(没有)异常,异常会被重新抛出,和当前映射保持不变。
map
步骤,然后返回电流值或
null
如果缺席:
V oldValue = map.get(key);
V newValue = (oldValue == null) ? value :
remappingFunction.apply(oldValue, value);
if (newValue == null)
map.remove(key);
else
map.put(key, newValue);
默认的实现对该方法的同步或原子性质没有保证。提供原子性的保证任何的实现必须重写此方法和文件的并发性能。特别是,所有接口的实现必须ConcurrentMap
文件函数是否是应用一次原子只有价值是不存在的。
key
键,得到的值是相关联的
value
-非空值是与存在价值的关键或相关的合并,如果没有存在的价值或空值与密钥相关的,是与密钥相关的
remappingFunction
-函数重新计算值如果存在
UnsupportedOperationException
-如果
put
操作不该Map支持(
optional)
ClassCastException
如果类指定的键或值防止它被存储在这个Map(
optional)
NullPointerException
-如果指定的键是无效的,这张Map不支持null键或值或remappingfunction是空的
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.