codecamp

鸿蒙OS Map

Map

public interface Map<K,V>

将键映射到值的对象。 map不能包含重复的键; 每个键最多可以映射到一个值。

这个接口代替了 Dictionary 类,它是一个完全抽象的类,而不是一个接口。

Map 接口提供三个集合视图,允许将映射的内容视为一组键、值集合或键值映射集。 map的顺序定义为map集合视图上的迭代器返回其元素的顺序。 一些map实现,如 TreeMap 类,对它们的顺序做出特定的保证; 其他的,比如 HashMap 类,不这样做。

注意:如果将可变对象用作映射键,则必须非常小心。 如果对象的值以影响等于比较的方式更改,而对象是映射中的键,则不指定映射的行为。 此禁令的一个特殊情况是不允许映射包含自己作为键。 虽然允许映射将自身作为值包含在内,但建议格外小心:equals 和 hashCode 方法不再在此类映射上得到很好的定义。

所有通用映射实现类都应该提供两个“标准”构造函数:一个 void(无参数)构造函数,它创建一个空映射,以及一个具有单个 Map 类型参数的构造函数,它创建一个具有相同键值的新映射,映射作为它的参数。 实际上,后一个构造函数允许用户复制任何映射,生成所需类的等效映射。 没有办法强制执行此建议(因为接口不能包含构造函数),但 JDK 中的所有通用映射实现都符合。

此接口中包含的“破坏性”方法,即修改其操作的映射的方法,如果此映射不支持该操作,则指定抛出 UnsupportedOperationException。 如果是这种情况,如果调用对map没有影响,这些方法可能会但不是必须抛出 UnsupportedOperationException。 例如,如果要“叠加”映射的映射为空,则在不可修改的映射上调用 putAll(java.util.Map) 方法可能但不是必须抛出异常。

一些map实现对它们可能包含的键和值有限制。 例如,一些实现禁止空键和值,而一些实现对其键的类型有限制。 尝试插入不合格的键或值会引发未经检查的异常,通常是 NullPointerException 或 ClassCastException。 尝试查询是否存在不合格的键或值可能会引发异常,或者它可能只是返回 false; 一些实现会表现出前一种行为,而另一些会表现出后者。 更一般地,尝试对不合格的键或值进行操作,其完成不会导致将不合格的元素插入到映射中,这可能会引发异常,也可能会成功,这取决于实现的选择。 此类异常在此接口的规范中被标记为“可选”。

Collections Framework 接口中的许多方法都是根据 Object#equals(Object) 方法定义的。 例如, containsKey(Object key) 方法的规范说:“当且仅当此映射包含键 k 的映射时才返回 true 使得 (key==null ? k==null : key.equals(k) )。” 本规范不应被解释为暗示使用非空参数键调用 Map.containsKey 将导致对任何键 k 调用 key.equals(k)。 实现可以自由地实现优化,从而避免调用 equals,例如,首先比较两个键的哈希码。 (Object#hashCode() 规范保证具有不相等哈希码的两个对象不能相等。)更一般地说,各种集合框架接口的实现可以自由地利用底层 Object 方法的指定行为,只要实现者认为它合适 .

一些执行map递归遍历的map操作可能会失败,但map直接或间接包含自身的自引用实例除外。 这包括 clone()、equals()、hashCode() 和 toString() 方法。 实现可以选择处理自引用场景,但是大多数当前的实现不这样做。

此接口是 Java 集合框架的成员。

嵌套类摘要

修饰符和类型 接口 描述
static interface Map.Entry<K,V> 映射条目(键值对)。

方法总结

修饰符和类型 方法 描述
void clear() 修饰符和类型从此映射中删除所有映射(可选操作)。
default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) 尝试计算指定键及其当前映射值的映射(如果没有当前映射,则为 null)。
default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 如果指定的键尚未与值关联(或映射为 null),则尝试使用给定的映射函数计算其值并将其输入到此映射中,除非为 null。
default V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) 如果指定键的值存在且非空,则尝试在给定键及其当前映射值的情况下计算新映射。
boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回 true。
boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射的 Set 视图。
boolean equals(Object o) 比较指定对象与此映射是否相等。
default void forEach(BiConsumer<? super K,? super V> action) 对该映射中的每个条目执行给定的操作,直到处理完所有条目或该操作引发异常。
V get(Object key) 返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。
default V getOrDefault(Object key, V defaultValue) 返回指定键映射到的值,如果此映射不包含该键的映射,则返回 defaultValue。
int hashCode() 返回此地图的哈希码值。
boolean isEmpty() 如果此映射不包含键值映射,则返回 true。
Set<K> keySet() 返回此映射中包含的键的 Set 视图。
default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) 如果指定的键尚未与值关联或与 null 关联,则将其与给定的非 null 值关联。
V put(K key, V value) 将指定值与此映射中的指定键关联(可选操作)。
void putAll(Map<? extends K,? extends V> m) 将所有映射从指定映射复制到此映射(可选操作)。
default V putIfAbsent(K key, V value) 如果指定的键尚未与值关联(或映射到 null),则将其与给定值关联并返回 null,否则返回当前值。
V remove(Object key) 如果存在,则从此映射中删除键的映射(可选操作)。
default boolean remove(Object key, Object value) 仅当当前映射到指定值时,才删除指定键的条目。
default V replace(K key, V value) 仅当当前映射到某个值时才替换指定键的条目。
default boolean replace(K key, V oldValue, V newValue) 仅当当前映射到指定值时才替换指定键的条目。
default void replaceAll(BiFunction<? super K,? super V,? extends V> function) 将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都已处理或该函数引发异常。
int size() 返回此映射中键值映射的数量。
CollectionV values() 返回此映射中包含的值的集合视图。

方法详情

size

int size()

返回此映射中键值映射的数量。 如果映射包含多个 Integer.MAX_VALUE 元素,则返回 Integer.MAX_VALUE。

返回:

此映射中的键值映射的数量

isEmpty

boolean isEmpty()

如果此映射不包含键值映射,则返回 true。

返回:

如果此映射不包含键值映射,则为 true

containsKey

boolean containsKey(Object key)

如果此映射包含指定键的映射,则返回 true。 更正式地说,当且仅当此映射包含键 k 的映射时才返回 true,使得 (key==null ? k==null : key.equals(k))。 (最多可以有一个这样的映射。)

参数:

参数名称 参数描述
key 要测试此map中是否存在的键

返回:

如果此映射包含指定键的映射,则为 true

Throws:

Throw名称 Throw描述
ClassCastException 如果此映射的键类型不合适(可选)
NullPointerException 如果指定的键为空并且此映射不允许空键(可选)

containsValue

boolean containsValue(Object value)

如果此映射将一个或多个键映射到指定值,则返回 true。 更正式地说,当且仅当此映射包含至少一个到值 v 的映射时才返回 true,使得 (value==null ? v==null : value.equals(v))。 对于 Map 接口的大多数实现,此操作可能需要映射大小的线性时间。

参数:

参数名称 参数描述
value 要测试其在此映射中的存在的值

返回:

如果此映射将一个或多个键映射到指定值,则为 true

Throws:

Throw名称 Throw描述
ClassCastException 如果该值的类型不适合此map(可选)
NullPointerException 如果指定的值为 null 并且此映射不允许 null 值(可选)

get

V get(Object key)

返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。

更正式地说,如果此映射包含从键 k 到值 v 的映射,使得 (key==null ? k==null : key.equals(k)),则此方法返回 v; 否则返回null。 (最多可以有一个这样的映射。)

如果此映射允许 null 值,则返回值为 null 并不一定表示该映射不包含该键的映射; 映射也可能将键显式映射为空。 containsKey 操作可用于区分这两种情况。

参数:

参数名称 参数描述
key 要返回其关联值的键

返回:

指定键映射到的值,如果此映射不包含该键的映射,则为 null

Throws:

Throw名称 Throw描述
ClassCastException 如果此映射的键类型不合适(可选)
NullPointerException 如果指定的键为空并且此映射不允许空键(可选)

put

V put(K key, V value)

将指定值与此映射中的指定键关联(可选操作)。 如果映射先前包含键的映射,则旧值将替换为指定值。 (当且仅当 m.containsKey(k) 返回 true 时,映射 m 被称为包含键 k 的映射。)

参数:

参数名称 参数描述
key 与指定值关联的键
value 与指定键关联的值

返回:

与 key 关联的前一个值,如果没有 key 映射,则返回 null。 (如果实现支持空值,则返回空值还可以指示映射先前将空值与键关联。)

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此map不支持 put 操作
ClassCastException 如果指定键或值的类阻止它存储在此映射中
NullPointerException 如果指定的键或值是 null 并且此映射不允许 null 键或值
IllegalArgumentException 如果指定键或值的某些属性阻止它存储在此映射中

remove

V remove(Object key)

如果存在,则从此映射中删除键的映射(可选操作)。 更正式地说,如果此映射包含从键 k 到值 v 的映射,使得 (key==null ? k==null : key.equals(k)),则删除该映射。 (map最多可以包含一个这样的映射。)

返回此映射先前与键关联的值,如果映射不包含键的映射,则返回 null。

如果此映射允许空值,则返回值 null 不一定表示映射不包含键的映射; map也有可能将键显式映射为空。

一旦调用返回,映射将不包含指定键的映射。

参数:

参数名称 参数描述
key 要从映射中删除其映射的键

返回:

与 key 关联的前一个值,如果没有 key 映射,则返回 null。

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此map不支持删除操作
ClassCastException 如果此映射的键类型不合适(可选)
NullPointerException 如果指定的键为空并且此映射不允许空键(可选)

putAll

void putAll(Map<? extends K,? extends V> m)

将所有映射从指定映射复制到此映射(可选操作)。 这个调用的效果等同于对指定映射中从键 k 到值 v 的每个映射调用一次 put(k, v) 在这个映射上的效果。 如果在操作进行时修改了指定的映射,则此操作的行为是未定义的。

参数:

参数名称 参数描述
m 要存储在此map中的映射

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此映射不支持 putAll 操作
ClassCastException 如果指定映射中的键或值的类阻止它存储在此映射中
NullPointerException 如果指定的映射为空,或者此映射不允许空键或值,并且指定的映射包含空键或值
IllegalArgumentException 如果指定映射中的键或值的某些属性阻止将其存储在此映射中

clear

void clear()

从此映射中删除所有映射(可选操作)。 此调用返回后,map将为空。

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此map不支持清除操作

keySet

Set<K> keySet()

返回此映射中包含的键的 Set 视图。 集合由map支持,因此对map的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。 该集合支持元素移除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。

返回:

此map中包含的键的集合视图

values

CollectionV values()

返回此映射中包含的值的集合视图。 集合由map支持,因此对map的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(通过迭代器自己的删除操作除外),则迭代的结果是不确定的。 该集合支持元素移除,即通过 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。

返回:

此map中包含的值的集合视图

entrySet

Set<Map.Entry<K,V>> entrySet()

返回此映射中包含的映射的 Set 视图。 集合由map支持,因此对map的更改会反映在集合中,反之亦然。 如果在对集合进行迭代时修改了映射(除了通过迭代器自己的删除操作,或通过迭代器返回的映射条目上的 setValue 操作),则迭代的结果是未定义的。 该集合支持元素移除,即通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中移除相应的映射。 它不支持 add 或 addAll 操作。

返回:

此Map中包含的映射的集合视图

equals

boolean equals(Object o)

比较指定对象与此映射是否相等。 如果给定对象也是一个映射并且两个映射表示相同的映射,则返回 true。 更正式地说,如果 m1.entrySet().equals(m2.entrySet()),则两个映射 m1 和 m2 表示相同的映射。 这确保了 equals 方法在 Map 接口的不同实现中正常工作。

覆盖:

类 Object 中的等于

参数:

参数名称 参数描述
o 要与此map比较是否相等的对象

返回:

如果指定的对象等于此map,则为 true

hashCode

int hashCode()

返回此map的哈希码值。 映射的哈希码定义为映射的 entrySet() 视图中每个条目的哈希码的总和。 这确保了 m1.equals(m2) 意味着 m1.hashCode()==m2.hashCode() 对于任何两个映射 m1 和 m2,如 Object#hashCode 的一般合同所要求的。

覆盖:

类 Object 中的 hashCode

返回:

此map的哈希码值

getOrDefault

default V getOrDefault(Object key, V defaultValue)

返回指定键映射到的值,如果此映射不包含该键的映射,则返回 defaultValue。

参数:

参数名称 参数描述
key 要返回其关联值的键
defaultValue 键的默认映射

返回:

指定键映射到的值,如果此映射不包含该键的映射,则为 defaultValue

Throws:

Throw名称 Throw描述
ClassCastException 如果此映射的键类型不合适(可选)
NullPointerException 如果指定的键为空并且此映射不允许空键(可选)

forEach

default void forEach(BiConsumer<? super K,? super V> action)

对该映射中的每个条目执行给定的操作,直到处理完所有条目或该操作引发异常。 除非实现类另有规定,否则按照条目集迭代的顺序执行动作(如果指定了迭代顺序)。动作抛出的异常将转发给调用者。

参数:

参数名称 参数描述
action 为每个条目执行的操作

Throws:

Throw名称 Throw描述
NullPointerException 如果指定的操作为空
ConcurrentModificationException 如果在迭代过程中发现条目被删除

replaceAll

default void replaceAll(BiFunction<? super K,? super V,? extends V> function)

将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都已处理或该函数引发异常。 函数抛出的异常被转发给调用者。

参数:

参数名称 参数描述
function 应用于每个条目的函数

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此映射的条目集合迭代器不支持集合操作。
ClassCastException 如果替换值的类别阻止它存储在此映射中
NullPointerException 如果指定的函数为空,或者指定的替换值为空,并且此映射不允许空值
ClassCastException 如果替换值的类型不适合此映射(可选)
NullPointerException 如果函数或替换值为空,并且此映射不允许空键或值(可选)
IllegalArgumentException 如果替换值的某些属性阻止它存储在此映射中(可选)
ConcurrentModificationException 如果在迭代过程中发现条目被删除

putIfAbsent

default V putIfAbsent(K key, V value)

如果指定的键尚未与值关联(或映射到 null),则将其与给定值关联并返回 null,否则返回当前值。

参数:

参数名称 参数描述
key 与指定值关联的键
value 与指定键关联的值

返回:

与指定键关联的前一个值,如果键没有映射,则返回 null。 (如果实现支持 null 值,则返回 null 还可以指示映射先前将 null 与键关联。)

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此映射不支持 put 操作(可选)
ClassCastException 如果键或值的类型不适合此映射(可选)
NullPointerException 如果指定的键或值为空,并且此映射不允许空键或值(可选)
IllegalArgumentException 如果指定键或值的某些属性阻止它存储在此映射中(可选)

remove

default boolean remove(Object key, Object value)

仅当当前映射到指定值时,才删除指定键的条目。

参数:

参数名称 参数描述
key 与指定值关联的键
value 预期与指定键关联的值

返回:

如果值已被删除,则为 true

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此map不支持删除操作(可选)
ClassCastException 如果键或值的类型不适合此映射(可选)
NullPointerException 如果指定的键或值为空,并且此映射不允许空键或值(可选)

replace

default boolean replace(K key, V oldValue, V newValue)

仅当当前映射到指定值时才替换指定键的条目。

参数:

参数名称 参数描述
key 与指定值关联的键
oldValue 预期与指定键关联的值
newValue 与指定键关联的值

返回:

如果值被替换,则为 true

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此映射不支持 put 操作(可选)
ClassCastException 如果指定键或值的类阻止它存储在此映射中
NullPointerException 如果指定的键或 newValue 为空,并且此映射不允许空键或值
NullPointerException 如果 oldValue 为 null 并且此映射不允许 null 值(可选)
IllegalArgumentException 如果指定键或值的某些属性阻止它存储在此映射中

replace

default V replace(K key, V value)

仅当当前映射到某个值时才替换指定键的条目。

参数:

参数名称 参数描述
key 与指定值关联的键
value 与指定键关联的值

返回:

与指定键关联的前一个值,如果键没有映射,则返回 null。 (如果实现支持 null 值,则返回 null 还可以指示映射先前将 null 与键关联。)

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此映射不支持 put 操作(可选)
ClassCastException 如果指定键或值的类阻止它存储在此映射中(可选)
NullPointerException 如果指定的键或值为空,并且此映射不允许空键或值
IllegalArgumentException 如果指定键或值的某些属性阻止它存储在此映射中

computeIfAbsent

default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)

如果指定的键尚未与值关联(或映射为 null),则尝试使用给定的映射函数计算其值并将其输入到此映射中,除非为 null。

如果函数返回 null,则不记录映射。 如果函数本身抛出(未经检查的)异常,则重新抛出异常,并且不记录任何映射。 最常见的用法是构造一个新对象作为初始映射值或记忆结果,如下所示:

  map.computeIfAbsent(key, k -> new Value(f(k))); 

或者实现一个多值映射,Map<K,Collection<V>>,每个键支持多个值:

  map.computeIfAbsent(key, k -> new HashSet<V>()).add(v); 

参数:

参数名称 参数描述
key 与指定值关联的键
mappingFunction 计算值的函数

返回:

与指定键关联的当前(现有或计算的)值,如果计算的值为 null,则为 null

Throws:

Throw名称 Throw描述
NullPointerException 如果指定键为空且此映射不支持空键,或者mappingFunction 为空
UnsupportedOperationException 如果此映射不支持 put 操作(可选)
ClassCastException 如果指定键或值的类阻止它存储在此映射中(可选)

computeIfPresent

default V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)

如果指定键的值存在且非空,则尝试在给定键及其当前映射值的情况下计算新映射。

如果函数返回 null,则删除映射。 如果函数本身抛出(未经检查的)异常,则重新抛出异常,并且当前映射保持不变。

参数:

参数名称 参数描述
key 与指定值关联的键
remappingFunction 计算值的函数

返回:

与指定键关联的新值,如果没有,则为 null

Throws:

Throw名称 Throw描述
NullPointerException 如果指定键为空且此映射不支持空键,或者 remappingFunction 为空
UnsupportedOperationException 如果此映射不支持 put 操作(可选)
ClassCastException 如果指定键或值的类阻止它存储在此映射中(可选)

compute

default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)

尝试计算指定键及其当前映射值的映射(如果没有当前映射,则为 null)。 例如,要创建或附加 String msg 到值映射:

  map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))

(方法 merge() 通常更容易用于此类目的。)

如果函数返回 null,则删除映射(如果最初不存在,则保持不存在)。 如果函数本身抛出(未经检查的)异常,则重新抛出异常,并且当前映射保持不变。

参数:

参数名称 参数描述
key 与指定值关联的键
remappingFunction 计算值的函数

返回:

与指定键关联的新值,如果没有,则为 null

Throws:

Throw名称 Throw描述
NullPointerException 如果指定键为空且此映射不支持空键,或者 remappingFunction 为空
UnsupportedOperationException 如果此映射不支持 put 操作(可选)
ClassCastException 如果指定键或值的类阻止它存储在此映射中(可选)

merge

default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)

如果指定的键尚未与值关联或与 null 关联,则将其与给定的非 null 值关联。 否则,将关联的值替换为给定重映射函数的结果,如果结果为 null,则将其删除。 当为一个键组合多个映射值时,此方法可能很有用。 例如,要创建或附加 String msg 到值映射:

  map.merge(key, msg, String::concat) 

如果函数返回 null,则删除映射。 如果函数本身抛出(未经检查的)异常,则重新抛出异常,并且当前映射保持不变。

参数:

参数名称 参数描述
key 与结果值关联的键
value 要与键关联的现有值合并的非空值,或者如果没有现有值或空值与键关联,则与键关联
remappingFunction 重新计算值的函数(如果存在)

返回:

与指定键关联的新值,如果没有值与该键关联,则为 null

Throws:

Throw名称 Throw描述
UnsupportedOperationException 如果此映射不支持 put 操作(可选)
ClassCastException 如果指定键或值的类阻止它存储在此映射中(可选)
NullPointerException 如果指定的键为空且此映射不支持空键或值或 remappingFunction 为空
鸿蒙OS ListIterator
鸿蒙OS Map.Entry
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

鸿蒙OS 开发

鸿蒙OS 术语

鸿蒙OS Java API参考

鸿蒙OS ohos.aafwk.ability

鸿蒙OS ohos.aafwk.abilityjet.activedata

鸿蒙OS ohos.aafwk.content

鸿蒙OS java.lang

鸿蒙OS java.Util

鸿蒙OS java.Util class

鸿蒙OS ohos.data.dataability

鸿蒙OS ohos.data.dataability class

鸿蒙OS ohos.agp.components

鸿蒙OS ohos.agp.components interface

鸿蒙OS ohos.agp.components class

鸿蒙OS ohos.global.configuration

鸿蒙OS java.io

鸿蒙OS ohos.data.resultset

鸿蒙OS ohos.data.resultset interface

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }