阅读(654) (6)

鸿蒙OS AbstractMap

2022-06-15 18:01:17 更新

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 方法的子类也可以抛出此异常,表示无法克隆实例。