AbstractMap
java.lang.Object
|—java.util.AbstractMap<K,V&
public abstract class AbstractMap<K,V>
extends Object
implements Map<K,V>
此类提供 Map 接口的骨架实现,以最大限度地减少实现此接口所需的工作量。
要实现一个不可修改的地图,程序员只需要扩展这个类并为 entrySet 方法提供一个实现,该方法返回地图映射的集合视图。通常,返回的集合将依次在 AbstractSet 之上实现。这个集合不应该支持 add 或 remove 方法,它的迭代器也不应该支持 remove 方法。
要实现一个可修改的映射,程序员必须额外覆盖这个类的 put 方法(否则会抛出 UnsupportedOperationException),并且 entrySet().iterator() 返回的迭代器必须额外实现它的 remove 方法。
根据 Map 接口规范中的建议,程序员通常应提供 void(无参数)和 map 构造函数。
此类中每个非抽象方法的文档都详细描述了它的实现。如果正在实现的映射允许更有效的实现,则可以覆盖这些方法中的每一个。
此类是 Java 集合框架的成员。
嵌套类摘要
修饰符和类型 | 类 | 描述 |
---|---|---|
static class | AbstractMap.SimpleEntryK,V | 维护键和值的条目。 |
static class | AbstractMap.SimpleImmutableEntryK,V | 维护不可变键和值的条目。 |
从接口 java.util.Map 继承的嵌套类/接口 |
---|
Map.EntryK,V |
构造函数摘要
修饰符 | 构造函数 | 描述 |
---|---|---|
protected | AbstractMap() | 唯一的构造函数。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
void | clear() | 从此映射中删除所有映射(可选操作)。 |
protected Object | clone() | 返回此 AbstractMap 实例的浅表副本:键和值本身没有被克隆。 |
boolean | containsKey(Object key) | 如果此映射包含指定键的映射,则返回 true。 |
boolean | containsValue(Object value) | 如果此映射将一个或多个键映射到指定值,则返回 true。 |
abstract SetMap.EntryK,V | entrySet() | 返回此映射中包含的映射的 Set 视图。 |
boolean | equals(Object o) | 比较指定对象与此映射是否相等。 |
V | get(Object key) | 返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。 |
int | hashCode() | 返回此map的哈希码值。 |
boolean | isEmpty() | 如果此映射不包含键值映射,则返回 true。 |
SetK | keySet() | 返回此映射中包含的键的 Set 视图。 |
V | put(K key, V value) | 将指定值与此映射中的指定键关联(可选操作)。 |
void | putAll(Map<? extends K,? extends V> m) | 将所有映射从指定映射复制到此映射(可选操作)。 |
V | remove(Object key) | 如果存在,则从此映射中删除键的映射(可选操作)。 |
int | size() | 返回此映射中键值映射的数量。 |
String | toString() | 返回此map的字符串表示形式。 |
CollectionV | values() | 返回此映射中包含的值的集合视图。 |
从接口 java.util.Map 继承的方法 |
---|
compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll |
从类 java.lang.Object 继承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
构造函数详细信息
AbstractMap
protected AbstractMap()
唯一的构造函数。 (用于子类构造函数的调用,通常是隐式的。)
方法详情
size
public int size()
返回此映射中键值映射的数量。 如果映射包含多个 Integer.MAX_VALUE 元素,则返回 Integer.MAX_VALUE。
指定者:
接口 MapK,V 中的大小
返回:
此映射中的键值映射的数量
isEmpty
public boolean isEmpty()
如果此映射不包含键值映射,则返回 true。
指定者:
接口 MapK,V 中的 isEmpty
返回:
如果此映射不包含键值映射,则为 true
containsValue
public boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。 更正式地说,当且仅当此映射包含至少一个到值 v 的映射时才返回 true,使得 (value==null ? v==null : value.equals(v))。 对于 Map 接口的大多数实现,此操作可能需要映射大小的线性时间。
指定者:
接口 MapK,V 中的 containsValue
参数:
参数名称 | 参数描述 |
---|---|
value | 要测试其在此映射中的存在的值 |
返回:
如果此映射将一个或多个键映射到指定值,则为 true
Throws:
Throw名称 | Throw描述 |
---|---|
ClassCastException | 如果该值的类型不适合此map(可选) |
NullPointerException | 如果指定的值为 null 并且此映射不允许 null 值(可选) |
containsKey
public boolean containsKey(Object key)
如果此映射包含指定键的映射,则返回 true。 更正式地说,当且仅当此映射包含键 k 的映射时才返回 true,使得 (key==null ? k==null : key.equals(k))。 (最多可以有一个这样的映射。)
指定者:
containsKey 在接口 MapK,V
参数:
参数名称 | 参数描述 |
---|---|
key | 要测试此地图中是否存在的键 |
返回:
如果此映射包含指定键的映射,则为 true
Throws:
Throw名称 | Throw描述 |
---|---|
ClassCastException | 如果此映射的键类型不合适(可选) |
NullPointerException | 如果指定的键为空并且此映射不允许空键(可选) |
get
public V get(Object key)
返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。
更正式地说,如果此映射包含从键 k 到值 v 的映射,使得 (key==null ? k==null : key.equals(k)),则此方法返回 v; 否则返回null。 (最多可以有一个这样的映射。)
如果此映射允许 null 值,则返回值为 null 并不一定表示该映射不包含该键的映射; 映射也可能将键显式映射为空。 containsKey 操作可用于区分这两种情况。
指定者:
进入接口 MapK,V
参数:
参数名称 | 参数描述 |
---|---|
key | 要返回其关联值的键 |
返回:
指定键映射到的值,如果此映射不包含该键的映射,则为 null
Throws:
Throw名称 | Throw描述 |
---|---|
ClassCastException | 如果此映射的键类型不合适(可选) |
NullPointerException | 如果指定的键为空并且此映射不允许空键(可选) |
put
public V put(K key, V value)
将指定值与此映射中的指定键关联(可选操作)。 如果映射先前包含键的映射,则旧值将替换为指定值。 (当且仅当 m.containsKey(k) 返回 true 时,映射 m 被称为包含键 k 的映射。)
指定者:
放入接口 MapK,V
参数:
参数名称 | 参数描述 |
---|---|
key | 与指定值关联的键 |
value | 与指定键关联的值 |
返回:
与 key 关联的前一个值,如果没有 key 映射,则返回 null。 (如果实现支持空值,则返回空值还可以指示映射先前将空值与键关联。)
Throws:
Throw名称 | Throw描述 |
---|---|
UnsupportedOperationException | 如果此地图不支持 put 操作 |
ClassCastException | 如果指定键或值的类阻止它存储在此映射中 |
NullPointerException | 如果指定的键或值是 null 并且此映射不允许 null 键或值 |
IllegalArgumentException | 如果指定键或值的某些属性阻止它存储在此映射中 |
remove
public V remove(Object key)
如果存在,则从此映射中删除键的映射(可选操作)。 更正式地说,如果此映射包含从键 k 到值 v 的映射,使得 (key==null ? k==null : key.equals(k)),则删除该映射。 (map最多可以包含一个这样的映射。)
返回此映射先前与键关联的值,如果映射不包含键的映射,则返回 null。
如果此映射允许空值,则返回值 null 不一定表示映射不包含键的映射; map也有可能将键显式映射为空。
一旦调用返回,映射将不包含指定键的映射。
指定者:
在接口 MapK,V 中移除
参数:
参数名称 | 参数描述 |
---|---|
key | 要从映射中删除其映射的键 |
返回:
与 key 关联的前一个值,如果没有 key 映射,则返回 null。
Throws:
Throw名称 | Throw描述 |
---|---|
UnsupportedOperationException | 如果此map不支持删除操作 |
ClassCastException | 如果此映射的键类型不合适(可选) |
NullPointerException | 如果指定的键为空并且此映射不允许空键(可选) |
putAll
public void putAll(Map<? extends K,? extends V> m)
将所有映射从指定映射复制到此映射(可选操作)。 这个调用的效果等同于对指定映射中从键 k 到值 v 的每个映射调用一次 put(k, v) 在这个映射上的效果。 如果在操作进行时修改了指定的映射,则此操作的行为是未定义的。
指定者:
putAll在接口MapK,V中
参数:
参数名称 | 参数描述 |
---|---|
m | 要存储在此地图中的映射 |
Throws:
Throw名称 | Throw描述 |
---|---|
UnsupportedOperationException | 如果此映射不支持 putAll 操作 |
ClassCastException | 如果指定映射中的键或值的类阻止它存储在此映射中 |
NullPointerException | 如果指定的映射为空,或者此映射不允许空键或值,并且指定的映射包含空键或值 |
IllegalArgumentException | 如果指定映射中的键或值的某些属性阻止将其存储在此映射中 |
clear
public void clear()
从此映射中删除所有映射(可选操作)。 此调用返回后,map将为空。
指定者:
在界面 MapK,V 中清除
Throws:
Throw名称 | Throw描述 |
---|---|
UnsupportedOperationException | 如果此map不支持清除操作 |
keySet
public SetK keySet()
返回此映射中包含的键的 Set 视图。 集合由map支持,因此对map的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。 该集合支持元素移除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的 keySet
返回:
此map中包含的键的集合视图
values
public CollectionV values()
返回此映射中包含的值的集合视图。 集合由map支持,因此对map的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。 该集合支持元素移除,即通过 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的值
返回:
此map中包含的值的集合视图
entrySet
public abstract SetMap.EntryK,V entrySet()
从接口复制的描述:map
返回此映射中包含的映射的 Set 视图。 集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(除了通过迭代器自己的删除操作,或通过迭代器返回的映射条目上的 setValue 操作),则迭代的结果是未定义的。 该集合支持元素移除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。
指定者:
接口 MapK,V 中的 entrySet
返回:
此map中包含的映射的集合视图
equals
public boolean equals(Object o)
比较指定对象与此映射是否相等。 如果给定对象也是一个映射并且两个映射表示相同的映射,则返回 true。 更正式地说,如果 m1.entrySet().equals(m2.entrySet()),则两个映射 m1 和 m2 表示相同的映射。 这确保了 equals 方法在 Map 接口的不同实现中正常工作。
指定者:
接口 MapK,V 中的等于
覆盖:
类 Object 中的等于
参数:
参数名称 | 参数描述 |
---|---|
o | 要与此map比较是否相等的对象 |
返回:
如果指定的对象等于此map,则为 true
hashCode
public int hashCode()
返回此map的哈希码值。 映射的哈希码定义为映射的 entrySet() 视图中每个条目的哈希码的总和。 这确保了 m1.equals(m2) 意味着 m1.hashCode()==m2.hashCode() 对于任何两个映射 m1 和 m2,如 Object#hashCode 的一般合同所要求的。
指定者:
接口 MapK,V 中的 hashCode
覆盖:
类 Object 中的 hashCode
返回:
此map的哈希码值
toString
public String toString()
返回此map的字符串表示形式。 字符串表示由一个键值映射列表组成,按映射的 entrySet 视图的迭代器返回的顺序,用大括号 (“{}”) 括起来。 相邻映射由字符“、”(逗号和空格)分隔。 每个键值映射都呈现为键,后跟等号(“=”),后跟关联的值。 键和值通过 String#valueOf(Object) 转换为字符串。
覆盖:
类 Object 中的 toString
返回:
此map的字符串表示形式
clone
protected Object clone() throws CloneNotSupportedException
返回此 AbstractMap 实例的浅表副本:键和值本身没有被克隆。
覆盖:
在类 Object 中克隆
返回:
这个map的浅拷贝
Throws:
Throw名称 | Throw描述 |
---|---|
CloneNotSupportedException | 如果对象的类不支持 Cloneable 接口。 覆盖 clone 方法的子类也可以抛出此异常,表示无法克隆实例。 |