- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- 参数类型
-
K- 此映射维护的密钥类型 -
V- 映射值的类型
- 实现的所有接口
-
Map<K,V>
- 已知直接子类:
-
ConcurrentHashMap,ConcurrentSkipListMap,EnumMap,HashMap,IdentityHashMap,TreeMap,WeakHashMap
public abstract class AbstractMap<K,V> extends Object implements Map<K,V>
此类提供Map接口的Map实现,以最大限度地减少实现此接口所需的工作量。要实现不可修改的映射,程序员只需要扩展此类并为
entrySet方法提供实现,该方法返回映射映射的集合视图。 通常,返回的集合将依次在AbstractSet上AbstractSet。 此set不应支持add或remove方法,其迭代器不应支持remove方法。要实现可修改的映射,程序员必须另外覆盖此类的
put方法(否则抛出UnsupportedOperationException),并且由entrySet().iterator()返回的迭代器必须另外实现其remove方法。程序员通常应根据
Map接口规范中的建议提供void(无参数)和映射构造函数。此类中每个非抽象方法的文档详细描述了它的实现。 如果正在实施的地图允许更有效的实施,则可以覆盖这些方法中的每一个。
此类是Java Collections Framework的成员。
- 从以下版本开始:
- 1.2
- 另请参见:
-
Map,Collection
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 static classAbstractMap.SimpleEntry<K,V>保持键和值的条目。static classAbstractMap.SimpleImmutableEntry<K,V>保持不可变键和值的Entry。
-
构造方法摘要
构造方法 变量 构造器 描述 protectedAbstractMap()唯一的构造函数。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 voidclear()从此映射中删除所有映射(可选操作)。protected Objectclone()返回此AbstractMap实例的浅表副本:未克隆键和值本身。booleancontainsKey(Object key)如果此映射包含指定键的映射,则返回true。booleancontainsValue(Object value)如果此映射将一个或多个键映射到指定值,则返回true。booleanequals(Object o)将指定对象与此映射进行比较以获得相等性。Vget(Object key)返回指定键映射到的值,如果此映射不包含键的映射,则返回null。inthashCode()返回此映射的哈希码值。booleanisEmpty()如果此映射不包含键 - 值映射,则返回true。Set<K>keySet()返回此映射中包含的键的Set视图。Vput(K key, V value)将指定的值与此映射中的指定键相关联(可选操作)。voidputAll(Map<? extends K,? extends V> m)将指定映射中的所有映射复制到此映射(可选操作)。Vremove(Object key)如果存在,则从该映射中移除键的映射(可选操作)。intsize()返回此映射中键 - 值映射的数量。StringtoString()返回此映射的字符串表示形式。Collection<V>values()返回此映射中包含的值的Collection视图。-
声明方法的接口 java.util.Map
compute, computeIfAbsent, computeIfPresent, entrySet, forEach, getOrDefault, merge, 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当且仅当此映射包含至少一个映射到值vObjects.equals(value, v)。 对于Map接口的大多数实现,此操作可能需要地图大小的线性时间。- Specified by:
-
containsValue在界面Map<K,V> - 实现要求:
-
此实现迭代超过
entrySet()搜索具有指定值的条目。 如果找到这样的条目,则返回true。 如果迭代终止而未找到此类条目,则返回false。 请注意,此实现需要地图大小的线性时间。 - 参数
-
value- 要测试其在此映射中的存在的值 - 结果
-
true如果此映射将一个或多个键映射到指定的值 - 异常
-
ClassCastException- 如果该地图的数据类型不合适( optional ) -
NullPointerException- 如果指定的值为null并且此映射不允许空值( 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:
-
getin interfaceMap<K,V> - 实现要求:
-
此实现迭代超过
entrySet()搜索具有指定键的条目。 如果找到这样的条目,则返回条目的值。 如果迭代在没有找到这样的条目的情况下终止,则返回null。 请注意,此实现需要地图大小的线性时间; 许多实现都会覆盖此方法。 - 参数
-
key- 要返回其关联值的密钥 - 结果
-
指定键映射到的值,如果此映射不包含键的映射,
null - 异常
-
ClassCastException- 如果此地图的密钥是不合适的类型( optional ) -
NullPointerException- 如果指定的键为null且此映射不允许空键( optional )
-
put
public V put(K key, V value)
- Specified by:
-
put接口Map<K,V> - 实现要求:
-
这个实现总是抛出
UnsupportedOperationException。 - 参数
-
key- 与指定值关联的键 -
value- 与指定键关联的值 - 结果
-
与
key关联的先前值,如果null没有映射,key。 (Anull返回也可以表示以前与null关联的地图与key,如果实现支持null值。) - 异常
-
UnsupportedOperationException- 如果此地图不支持put操作 -
ClassCastException- 如果指定键或值的类阻止它存储在此映射中 -
NullPointerException- 如果指定的键或值为null,并且此映射不允许空键或值 -
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操作从集合(和支持映射)中删除该条目,并返回保存的值。 如果迭代在没有找到这样的条目的情况下终止,则返回null。 请注意,此实现需要地图大小的线性时间; 许多实现都会覆盖此方法。请注意,如果
entrySet迭代器不支持remove方法并且此映射包含指定键的映射,则此实现将抛出UnsupportedOperationException。 - 参数
-
key- 要从地图中删除其映射的键 - 结果
-
先前的值相关联的
key,或null如果没有映射key。 - 异常
-
UnsupportedOperationException- 如果此地图不支持remove操作 -
ClassCastException- 如果该地图的密码是不合适类型( optional ) -
NullPointerException- 如果指定的键为null且此映射不允许空键( optional )
-
putAll
public void putAll(Map<? extends K,? extends V> m)
将指定映射中的所有映射复制到此映射(可选操作)。 对于从指定映射中的键k到值v每个映射,此调用的效果等效于在此映射上调用put(k, v)的效果。 如果在操作过程中修改了指定的映射,则此操作的行为是不确定的。- Specified by:
-
putAll,界面Map<K,V> - 实现要求:
-
此实现迭代指定的映射的
entrySet()集合,并为迭代返回的每个条目调用此映射的put操作一次。请注意,如果此映射不支持
put操作且指定的映射put空,则此实现将引发UnsupportedOperationException。 - 参数
-
m- 要存储在此映射中的映射 - 异常
-
UnsupportedOperationException- 如果此映射不支持putAll操作 -
ClassCastException- 如果指定映射中的键或值的类阻止它存储在此映射中 -
NullPointerException- 如果指定的映射为null,或者此映射不允许空键或值,并且指定的映射包含null键或值 -
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的集合 。 子类的迭代器方法在此映射的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的集合。 子类的迭代器方法在此映射的entrySet()迭代器上返回“包装器对象”。size方法委托此映射的size方法,contains方法委托此映射的containsValue方法。该集合在第一次调用此方法时创建,并在响应所有后续调用时返回。 没有执行同步,因此对此方法的多次调用很可能不会返回相同的集合。
- 结果
- 此映射中包含的值的集合视图
-
equals
public boolean equals(Object o)
将指定对象与此映射进行比较以获得相等性。 如果给定对象也是一个映射,并且两个映射表示相同的映射,则返回true。 更正式地,如果m1.entrySet().equals(m2.entrySet()),则两个映射m1和m2表示相同的映射。 这可确保equals方法在Map接口的不同实现中正常工作。- Specified by:
-
equalsin interfaceMap<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,按照m2的一般合同的要求 。- 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
-
-