- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- 参数类型
-
K
- 由该地图维护的键的类型 -
V
- 映射值的类型
- All Implemented Interfaces:
-
Map<K,V>
- 已知直接子类:
-
ConcurrentHashMap
,ConcurrentSkipListMap
,EnumMap
,HashMap
,IdentityHashMap
,TreeMap
,WeakHashMap
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 Collections Framework的成员。
- 从以下版本开始:
- 1.2
- 另请参见:
-
Map
,Collection
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 static class
AbstractMap.SimpleEntry<K,V>
保存密钥和值的条目。static class
AbstractMap.SimpleImmutableEntry<K,V>
保持一个不变的钥匙和价值的条目。
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
AbstractMap()
唯一的构造函数。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 void
clear()
从该地图中删除所有的映射(可选操作)。protected Object
clone()
返回此AbstractMap
实例的浅拷贝:键和值本身不被克隆。boolean
containsKey(Object key)
如果此映射包含指定键的映射,则返回true
。boolean
containsValue(Object value)
如果此映射将一个或多个键映射到指定的值,则返回true
。abstract Set<Map.Entry<K,V>>
entrySet()
返回此地图中包含的映射的Set
视图。boolean
equals(Object o)
将指定的对象与此映射进行比较以获得相等性。V
get(Object key)
返回指定键映射到的值,如果此映射不包含该键的映射,则返回null
。int
hashCode()
返回此地图的哈希码值。boolean
isEmpty()
如果此映射不包含键值映射,则返回true
。Set<K>
keySet()
返回此地图中包含的键的Set
视图。V
put(K key, V value)
将指定的值与该映射中的指定键相关联(可选操作)。void
putAll(Map<? extends K,? extends V> m)
将指定地图的所有映射复制到此映射(可选操作)。V
remove(Object key)
如果存在(从可选的操作),从该地图中删除一个键的映射。int
size()
返回此地图中键值映射的数量。String
toString()
返回此地图的字符串表示形式。Collection<V>
values()
返回此地图中包含的值的Collection
视图。-
Methods inherited from interface java.util.Map
compute, computeIfAbsent, computeIfPresent, entry, forEach, getOrDefault, merge, of, of, of, of, of, of, of, of, of, of, of, ofEntries, putIfAbsent, remove, replace, replace, replaceAll
-
-
-
-
方法详细信息
-
size
public int size()
返回此地图中键值映射的数量。 如果地图包含Integer.MAX_VALUE
元素,返回Integer.MAX_VALUE
。
-
isEmpty
public boolean isEmpty()
如果此映射不包含键值映射,则返回true
。
-
containsValue
public boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定的值,则返回true
。 更正式地,返回true
如果且仅当此映射包含至少一个映射到值v
,使得Objects.equals(value, v)
。 对于Map
接口的大多数实现,此操作可能需要在地图大小的时间线性。- Specified by:
-
containsValue
在接口Map<K,V>
- 实现要求:
-
该实现迭代超过
entrySet()
搜索具有指定值的条目。 如果找到这样的条目,则返回true
。 如果迭代结束而没有找到这样的条目,则返回false
。 请注意,此实现需要在地图大小上具有线性时间。 - 参数
-
value
- 要在此地图中存在的值要进行测试 - 结果
-
true
如果该地图将一个或多个键映射到指定的值 - 异常
-
ClassCastException
- 如果该值对于该地图是不合适的类型( optional ) -
NullPointerException
- 如果指定的值为空,并且该映射不允许空值( optional )
-
containsKey
public boolean containsKey(Object key)
如果此映射包含指定键的映射,则返回true
。 更正式地说,返回true
当且仅当此映射包含一个键的映射关系k
这样Objects.equals(key, k)
。 (最多可以有一个这样的映射。)- Specified by:
-
containsKey
在接口Map<K,V>
- 实现要求:
-
该实现遍历
entrySet()
搜索具有指定键的条目。 如果找到这样的条目,则返回true
。 如果迭代结束而没有找到这样的条目,则返回false
。 请注意,此实现需要在地图大小上具有线性时间; 许多实现将覆盖此方法。 - 参数
-
key
- 要在此地图中存在的密钥要进行测试 - 结果
-
true
如果此映射包含指定键的映射 - 异常
-
ClassCastException
- 如果密钥是该地图不合适的类型( optional ) -
NullPointerException
- 如果指定的键为空,并且该映射不允许空键( optional )
-
get
public V get(Object key)
返回指定键映射到的值,如果此映射不包含该键的映射,则返回null
。更正式地,如果此映射包含从密钥映射
k
到值v
使得Objects.equals(key, k)
,则此方法返回v
; 否则返回null
。 (最多可以有一个这样的映射。)如果此映射允许空值,则返回值
null
不一定表示映射不包含该键的映射; 地图也可能将密钥明确地映射到null
。 可以使用containsKey
操作来区分这两种情况。- Specified by:
-
get
在接口Map<K,V>
- 实现要求:
-
该实现遍历
entrySet()
搜索具有指定键的条目。 如果找到这样的条目,则返回条目的值。 如果迭代结束而没有找到这样的条目,则返回null
。 请注意,此实现需要在地图大小上具有线性时间; 许多实现将覆盖此方法。 - 参数
-
key
- 要返回其关联值的键 - 结果
-
指定键映射到的值,如果此映射不包含键的映射,
null
- 异常
-
ClassCastException
- 如果密钥对于此地图是不合适的类型( optional ) -
NullPointerException
- 如果指定的键为空,并且此映射不允许空键( optional )
-
put
public V put(K key, V value)
将指定的值与该映射中的指定键相关联(可选操作)。 如果映射先前包含了密钥的映射,则旧值将被指定的值替换。 (如果且仅当m.containsKey(k)
将返回true
则映射m
被称为包含关键字k
的映射。)- Specified by:
-
put
在接口Map<K,V>
- 实现要求:
-
这个实现总是抛出一个
UnsupportedOperationException
。 - 参数
-
key
- 指定值与之关联的键 -
value
- 与指定键相关联的值 - 结果
-
与
key
相关联的上一个值,如果null
没有映射,key
。 (Anull
返回也可以表示该地图以前关联的null
与key
,如果实现支持null
值) - 异常
-
UnsupportedOperationException
- 如果此地图不支持put
操作 -
ClassCastException
- 如果指定的键或值的类阻止它存储在此映射中 -
NullPointerException
- 如果指定的键或值为空,并且此映射不允许空值或值 -
IllegalArgumentException
- 如果指定键或值的某些属性阻止其存储在此映射中
-
remove
public V remove(Object key)
如果存在(从可选的操作),从该地图中删除一个键的映射。 更正式地,如果该映射包含从k
键到值v
的映射,使得Objects.equals(key, k)
删除该映射。 (地图最多可以包含一个这样的映射。)返回此映射先前关联该键的值,如果映射不包含关键字的映射,则返回
null
。如果此映射允许空值,则返回值为
null
并不一定表示该映射不包含该键的映射; 映射也可能显式地将密钥映射到null
。一旦呼叫返回,该映射将不包含指定键的映射。
- Specified by:
-
remove
在接口Map<K,V>
- 实现要求:
-
此实现遍历
entrySet()
搜索具有指定键的条目。 如果找到这样的条目,它的值是通过其getValue
操作获得的,使用迭代器的remove
操作将该条目从集合(和背景映射)中remove
,并返回保存的值。 如果迭代结束而没有找到这样的条目,则返回null
。 请注意,此实现需要在地图大小上具有线性时间; 许多实现将覆盖此方法。请注意,如果
entrySet
迭代器不支持remove
方法,并且此映射包含指定键的映射,则此实现将抛出UnsupportedOperationException
。 - 参数
-
key
- 要从地图中删除其映射的密钥 - 结果
-
先前的值相关联
key
,或null
如果没有映射key
。 - 异常
-
UnsupportedOperationException
- 如果此地图不支持remove
操作 -
ClassCastException
- 如果密钥对于此地图是不合适的类型( optional ) -
NullPointerException
- 如果指定的键为空,并且此映射不允许空键( optional )
-
putAll
public void putAll(Map<? extends K,? extends V> m)
将指定地图的所有映射复制到此映射(可选操作)。 此呼叫的效果等同于在此地图上调用put(k, v)
一次,从k
关键字k
到指定地图中的值v
。 如果在操作进行中修改了指定的地图,则此操作的行为是未定义的。- Specified by:
-
putAll
在接口Map<K,V>
- 实现要求:
-
此实现将遍历指定的地图
entrySet()
集合,并为迭代返回的每个条目调用此映射的put
操作一次。请注意,如果此映射不支持
put
操作,并且指定的映射是非空的,则此实现将抛出UnsupportedOperationException
。 - 参数
-
m
- 要存储在此地图中的映射 - 异常
-
UnsupportedOperationException
- 如果此地图不支持putAll
操作 -
ClassCastException
- 如果指定地图中的键或值的类阻止它存储在此映射中 -
NullPointerException
- 如果指定的地图为空,或者该地图不允许空值或值,并且指定的地图包含空值或值 -
IllegalArgumentException
- 如果指定地图中的键或值的某些属性阻止其存储在此映射中
-
clear
public void clear()
从该地图中删除所有的映射(可选操作)。 此呼叫返回后,地图将为空。- Specified by:
-
clear
在接口Map<K,V>
- 实现要求:
-
此实现调用
entrySet().clear()
。注意,此实现抛出
UnsupportedOperationException
如果entrySet
不支持clear
操作。 - 异常
-
UnsupportedOperationException
- 如果此地图不支持clear
操作
-
keySet
public Set<K> keySet()
返回此地图中包含的键的Set
视图。 该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。 如果在集合中的迭代正在进行中修改映射(除了通过迭代器自己的remove
操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove
,Set.remove
,removeAll
,retainAll
,和clear
操作。 它不支持add
或addAll
操作。- Specified by:
-
keySet
在接口Map<K,V>
- 实现要求:
-
此实现返回一个子类
AbstractSet
的集合 。 子类的iterator方法在该映射的entrySet()
迭代器上返回“包装对象”。size
方法委托给该地图的size
方法和contains
方法委托给该地图的containsKey
方法。该集合是在第一次调用此方法时创建的,并响应所有后续调用而返回。 不执行同步,因此对该方法的多次调用将不会全部返回相同的集合。
- 结果
- 该地图中包含的键的集合视图
-
values
public Collection<V> values()
返回此地图中包含的值的Collection
视图。 集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。 如果在集合中的迭代正在进行中修改映射(除了通过迭代器自己的remove
操作),迭代的结果是未定义的。 该collection支持元素移除,即从映射中相应的映射,经由Iterator.remove
,Collection.remove
,removeAll
,retainAll
和clear
操作。 它不支持add
或addAll
操作。- Specified by:
-
values
在接口Map<K,V>
- 实现要求:
-
此实现返回一个子类
AbstractCollection
的集合。 子类的iterator方法在该映射的entrySet()
迭代器上返回“包装对象”。size
方法将该地图的size
方法和contains
方法委托给该地图的containsValue
方法。该集合是在第一次调用此方法时创建的,并响应所有后续调用而返回。 不执行同步,因此对该方法的多次调用将不会全部返回相同的集合。
- 结果
- 该地图中包含的值的集合视图
-
entrySet
public abstract Set<Map.Entry<K,V>> entrySet()
描述从接口Map
复制返回此地图中包含的映射的Set
视图。 该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。 如果在集合中的迭代正在进行时(除了通过迭代器自己的remove
操作或通过迭代器返回的映射条目上的setValue
操作之外)修改映射,则迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove
,Set.remove
,removeAll
,retainAll
和clear
操作。 它不支持add
或addAll
操作。
-
equals
public boolean equals(Object o)
将指定的对象与此映射进行比较以获得相等性。 如果给定的对象也是一个地图,并且两个地图代表相同的映射,则返回true
。 更正式地,如果m1.entrySet().equals(m2.entrySet())
,两个地图m1
和m2
表示相同的映射。 这可以确保equals
方法在Map
接口的不同实现中正常工作。- Specified by:
-
equals
在接口Map<K,V>
- 重写:
-
equals
在Object
- 实现要求:
-
该实现首先检查指定的对象是否是该映射;
如果是,则返回
true
。 然后,它检查指定的对象是否是与该映射的大小相同大小的映射; 如果没有,则返回false
。 如果是这样,它会遍历该地图的entrySet
集合,并检查指定的地图是否包含该地图包含的每个映射。 如果指定的映射不能包含这样的映射,则返回false
。 如果迭代完成,则返回true
。 - 参数
-
o
- 要与该地图相等的对象 - 结果
-
true
如果指定的对象等于此映射 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此地图的哈希码值。 映射的哈希码被定义为地图entrySet()
视图中每个条目的哈希码的总和。 这确保了m1.equals(m2)
意味着m1.hashCode()==m2.hashCode()
对于任何两个地图m1
和m2
,所要求的一般合同Object.hashCode()
。- Specified by:
-
hashCode
在接口Map<K,V>
- 重写:
-
hashCode
在Object
- 实现要求:
-
该实现遍历
entrySet()
,在集合中的每个元素(条目)上调用hashCode()
,并将结果相加。 - 结果
- 该地图的哈希码值
- 另请参见:
-
Map.Entry.hashCode()
,Object.equals(Object)
,Set.equals(Object)
-
toString
public String toString()
返回此地图的字符串表示形式。 字符串表示由地图entrySet
视图的迭代器返回的顺序的键值映射列表(括在大括号中)("{}"
)组成。 相邻的映射由字符", "
(逗号和空格)分隔。 每个键值映射都作为键后跟一个等号("="
),后跟相关值。 键和值将转换为字符串,如String.valueOf(Object)
。
-
clone
protected Object clone() throws CloneNotSupportedException
返回此AbstractMap
实例的浅拷贝:键和值本身不被克隆。- 重写:
-
clone
在Object
- 结果
- 这张地图的浅拷贝
- 异常
-
CloneNotSupportedException
- 如果对象的类不支持Cloneable
接口。 覆盖clone
方法的子类也可以抛出此异常以指示实例无法克隆。 - 另请参见:
-
Cloneable
-
-