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