- 类型参数:
-
K
- 此映射维护的键的类型 -
V
- 映射值的类型
- 所有已实现的接口:
-
Map<K,
V>
- 直接已知的子类:
-
ConcurrentHashMap
,ConcurrentSkipListMap
,EnumMap
,HashMap
,IdentityHashMap
,TreeMap
,WeakHashMap
Map
接口的骨架实现,以最小化实现此接口所需的工作量。
要实现一个不可修改的映射,程序员只需扩展此类并为entrySet
方法提供一个实现,该方法返回映射的映射的集合视图。通常,返回的集合将在AbstractSet
之上实现。此集合不应支持add
或remove
方法,其迭代器不应支持remove
方法。
要实现一个可修改的映射,程序员必须另外覆盖此类的put
方法(否则会抛出UnsupportedOperationException
),并且entrySet().iterator()
返回的迭代器必须另外实现其remove
方法。
程序员通常应根据Map
接口规范中的建议提供一个无参和映射构造函数。
此类中每个非抽象方法的文档详细描述了其实现。如果正在实现的映射允许更有效的实现,则可以覆盖这些方法中的每一个。
此类是Java集合框架的成员。
- 自 JDK 版本:
- 1.2
- 参见:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
一个维护键和值的条目。static class
一个不可修改的维护键和值的条目。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
从此映射中删除所有映射(可选操作)。protected Object
clone()
返回此AbstractMap
实例的浅拷贝:键和值本身不会被克隆。boolean
containsKey
(Object key) 如果此映射包含指定键的映射,则返回true
。boolean
containsValue
(Object value) 如果此映射将一个或多个键映射到指定值,则返回true
。boolean
将指定对象与此映射进行比较以检查相等性。返回指定键映射到的值,如果此映射不包含键的映射,则返回null
。int
hashCode()
返回此映射的哈希码值。boolean
isEmpty()
如果此映射不包含键-值映射,则返回true
。keySet()
返回此映射中包含的键的Set
视图。在此映射中将指定键与指定值关联(可选操作)。void
将指定映射中的所有映射复制到此映射中(可选操作)。如果存在,则从此映射中删除键的映射(可选操作)。int
size()
返回此映射中键-值映射的数量。toString()
返回此映射的字符串表示形式。values()
返回此映射中包含的值的Collection
视图。Methods declared in interface java.util.Map
compute, computeIfAbsent, computeIfPresent, entrySet, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll
-
Constructor Details
-
AbstractMap
protected AbstractMap()唯一构造函数。(通常由子类构造函数隐式调用。)
-
-
Method Details
-
size
public int size()返回此映射中键-值映射的数量。如果映射包含超过Integer.MAX_VALUE
个元素,则返回Integer.MAX_VALUE
。 -
isEmpty
public boolean isEmpty()如果此映射不包含键-值映射,则返回true
。 -
containsValue
如果此映射将一个或多个键映射到指定值,则返回true
。更正式地说,如果此映射包含至少一个映射到值v
的键,则返回true
,使得Objects.equals(value, v)
。对于大多数Map
接口的实现,此操作可能需要与映射大小成线性时间。- 指定者:
-
containsValue
在接口Map<K,
中V> - 实现要求:
-
此实现遍历
entrySet()
,搜索具有指定值的条目。如果找到这样的条目,则返回true
。如果迭代在没有找到这样的条目的情况下终止,则返回false
。请注意,此实现在映射大小方面需要线性时间。 - 参数:
-
value
- 要测试其在此映射中存在性的值 - 返回:
-
如果此映射将一个或多个键映射到指定值,则返回
true
- 抛出:
-
ClassCastException
- 如果值对于此映射的类型不合适(可选) -
NullPointerException
- 如果指定的值为null且此映射不允许空值(可选)
-
containsKey
如果此映射包含指定键的映射,则返回true
。更正式地说,如果此映射包含一个键k
的映射,使得Objects.equals(key, k)
,则返回true
。(最多只能有一个这样的映射。)- 指定者:
-
containsKey
在接口Map<K,
中V> - 实现要求:
-
此实现遍历
entrySet()
,搜索具有指定键的条目。如果找到这样的条目,则返回true
。如果迭代在没有找到这样的条目的情况下终止,则返回false
。请注意,此实现在映射大小方面需要线性时间;许多实现将覆盖此方法。 - 参数:
-
key
- 要测试其在此映射中存在性的键 - 返回:
-
如果此映射包含指定键的映射,则返回
true
- 抛出:
-
ClassCastException
- 如果键对于此映射的类型不合适(可选) -
NullPointerException
- 如果指定的键为null且此映射不允许空键(可选)
-
get
返回指定键映射到的值,如果此映射不包含键的映射,则返回null
。更正式地说,如果此映射包含从键
k
到值v
的映射,使得Objects.equals(key, k)
,则此方法返回v
;否则返回null
。(最多只能有一个这样的映射。)如果此映射允许空值,则返回
null
的返回值不一定表示映射不包含键的映射;也可能是映射明确将键映射到null
。可以使用containsKey
操作来区分这两种情况。- 指定由:
-
get
在接口Map<K,
中V> - 实现要求:
-
此实现通过迭代
entrySet()
搜索具有指定键的条目。如果找到这样的条目,则返回条目的值。如果迭代在没有找到这样的条目的情况下终止,则返回null
。请注意,此实现在地图大小方面需要线性时间;许多实现将覆盖此方法。 - 参数:
-
key
- 要返回其关联值的键 - 返回:
-
指定键映射到的值,如果此映射不包含键的映射,则返回
null
- 抛出:
-
ClassCastException
- 如果键的类型不适合此映射(可选) -
NullPointerException
- 如果指定的键为null且此映射不允许null键(可选)
-
put
在此映射中将指定值与指定键关联(可选操作)。如果映射先前包含键的映射,则旧值将被指定值替换。(如果映射m
仅当m.containsKey(k)
返回true
时才包含键k
的映射。)- 指定由:
-
put
在接口Map<K,
中V> - 实现要求:
-
此实现始终抛出
UnsupportedOperationException
。 - 参数:
-
key
- 要与指定值关联的键 -
value
- 要与指定键关联的值 - 返回:
-
与
key
关联的先前值,如果key
没有映射,则返回null
。(如果实现支持null
值,则null
返回还可以表示映射先前将null
与key
关联。) - 抛出:
-
UnsupportedOperationException
- 如果此映射不支持put
操作 -
ClassCastException
- 如果指定键或值的类别阻止其存储在此映射中 -
NullPointerException
- 如果指定的键或值为null且此映射不允许null键或值 -
IllegalArgumentException
- 如果指定键或值的某些属性阻止其存储在此映射中
-
remove
如果存在,则从此映射中删除键的映射(可选操作)。更正式地说,如果此映射包含从键k
到值v
的映射,使得Objects.equals(key, k)
,则将删除该映射。(映射最多可以包含一个这样的映射。)返回此映射先前关联的键,如果映射不包含键的映射,则返回
null
。如果此映射允许null值,则
null
的返回值不一定表示映射不包含键的映射;也有可能映射明确将键映射到null
。一旦调用返回,映射将不包含指定键的映射。
- 指定由:
-
remove
在接口Map<K,
中V> - 实现要求:
-
此实现通过迭代
entrySet()
搜索具有指定键的条目。如果找到这样的条目,则使用其getValue
操作获取其值,使用迭代器的remove
操作从集合(和支持映射)中删除条目,并返回保存的值。如果迭代在没有找到这样的条目的情况下终止,则返回null
。请注意,此实现在地图大小方面需要线性时间;许多实现将覆盖此方法。请注意,如果
entrySet
迭代器不支持remove
方法且此映射包含指定键的映射,则此实现将抛出UnsupportedOperationException
。 - 参数:
-
key
- 要从映射中删除其映射的键 - 返回:
-
与
key
关联的先前值,如果key
没有映射,则返回null
- 抛出:
-
UnsupportedOperationException
- 如果此映射不支持remove
操作 -
ClassCastException
- 如果键的类型不适合此映射(可选) -
NullPointerException
- 如果指定的键为null且此映射不允许null键(可选)
-
putAll
将指定映射中的所有映射复制到此映射(可选操作)。此调用的效果等效于在此映射上为指定映射中的每个从键k
到值v
的映射调用put(k, v)
。如果在操作进行中修改了指定映射,则此操作的行为是未定义的。如果指定映射具有定义的遇到顺序,则其映射的处理通常按照该顺序进行。- 指定由:
-
putAll
在接口Map<K,
中V> - 实现要求:
-
此实现遍历指定映射的
entrySet()
集合,并为迭代返回的每个条目调用此映射的put
操作。请注意,如果此映射不支持
put
操作且指定映射非空,则此实现将抛出UnsupportedOperationException
。 - 参数:
-
m
- 要存储在此映射中的映射 - 抛出:
-
UnsupportedOperationException
- 如果此映射不支持putAll
操作 -
ClassCastException
- 如果指定映射中键或值的类别阻止其存储在此映射中 -
NullPointerException
- 如果指定映射为null,或者如果此映射不允许null键或值,且指定映射包含null键或值 -
IllegalArgumentException
- 如果指定映射中键或值的某些属性阻止其存储在此映射中
-
clear
public void clear()从此映射中删除所有映射(可选操作)。调用返回后,映射将为空。- 指定由:
-
clear
在接口Map<K,
中V> - 实现要求:
-
此实现调用
entrySet().clear()
。请注意,如果
entrySet
不支持clear
操作,则此实现将抛出UnsupportedOperationException
。 - 抛出:
-
UnsupportedOperationException
- 如果此映射不支持clear
操作
-
keySet
返回此映射中包含的键的Set
视图。该集合由映射支持,因此对映射的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(除非通过迭代器自身的remove
操作),则迭代的结果是未定义的。该集合支持元素删除,通过Iterator.remove
、Set.remove
、removeAll
、retainAll
和clear
操作从映射中删除相应的映射。它不支持add
或addAll
操作。- 指定者:
-
keySet
在接口Map<K,
中V> - 实现要求:
-
此实现返回一个子类为
AbstractSet
的集合。子类的迭代器方法返回一个"包装对象",该对象覆盖了此映射的entrySet()
迭代器。size
方法委托给此映射的size
方法,contains
方法委托给此映射的containsKey
方法。第一次调用此方法时将创建集合,并在所有后续调用中返回。不执行同步,因此有轻微的可能性,多次调用此方法将不会返回相同的集合。
- 返回:
- 包含在此映射中的键的集合视图
-
values
返回此映射中包含的值的Collection
视图。该集合由映射支持,因此对映射的更改会反映在集合中,反之亦然。如果在对集合进行迭代时修改了映射(除了通过迭代器自身的remove
操作),则迭代结果是未定义的。该集合支持元素删除,通过Iterator.remove
、Collection.remove
、removeAll
、retainAll
和clear
操作从映射中删除相应的映射。它不支持add
或addAll
操作。- 指定者:
-
values
在接口Map<K,
中V> - 实现要求:
-
此实现返回一个子类为
AbstractCollection
的集合。子类的迭代器方法返回一个"包装对象",该对象覆盖了此映射的entrySet()
迭代器。size
方法委托给此映射的size
方法,contains
方法委托给此映射的containsValue
方法。第一次调用此方法时将创建集合,并在所有后续调用中返回。不执行同步,因此有轻微的可能性,多次调用此方法将不会返回相同的集合。
- 返回:
- 包含在此映射中的值的集合视图
-
equals
将指定对象与此映射进行比较以检查是否相等。如果给定对象也是一个映射,并且两个映射表示相同的映射,则返回true
。更正式地说,如果两个映射m1
和m2
表示相同的映射,则m1.entrySet().equals(m2.entrySet())
。这确保equals
方法在Map
接口的不同实现之间正常工作。 -
hashCode
public int hashCode()返回此映射的哈希码值。映射的哈希码定义为映射的entrySet()
视图中每个条目的哈希码之和。这确保了m1.equals(m2)
意味着对于任何两个映射m1
和m2
,m1.hashCode()==m2.hashCode()
,这是Object.hashCode()
的一般契约要求。 -
toString
返回此映射的字符串表示形式。字符串表示形式由映射的entrySet
视图的迭代器返回的键-值映射列表组成,用大括号("{}"
)括起来。相邻的映射由字符", "
(逗号和空格)分隔。每个键-值映射都以键后跟等号("="
)后跟相关值的形式呈现。键和值将被转换为字符串,如String.valueOf(Object)
所示。 -
clone
返回此AbstractMap
实例的浅拷贝:键和值本身不会被克隆。- 覆盖:
-
clone
在类Object
中 - 返回:
- 此映射的浅拷贝
- 抛出:
-
CloneNotSupportedException
- 如果对象的类不支持Cloneable
接口。覆盖clone
方法的子类也可以抛出此异常,以指示实例无法被克隆。 - 参见:
-