IMap 接口

定义

将键映射到值的一个对象。

[Android.Runtime.Register("java/util/Map", "", "Java.Util.IMapInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public interface IMap : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/Map", "", "Java.Util.IMapInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type IMap = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
派生
属性
实现

注解

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

此接口取代 Dictionary 类,这是一个完全抽象的类,而不是接口。

Map 接口提供三个 集合视图,允许将地图的内容视为一组键、值集合或键值映射集。 地图 的顺序 定义为地图集合视图中迭代器返回其元素的顺序。 某些映射实现(如 TreeMap 类)对其遇到顺序作出具体保证;其他实现(如 HashMap 类)则不执行。 具有定义的遇到顺序的映射通常是接口的 SequencedMap 子类型。

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

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

此接口中包含的“破坏性”方法(即修改操作映射的方法)指定为在不支持该操作时引发 UnsupportedOperationException 的映射。 如果是这种情况,则这些方法可能(但不需要)引发 UnsupportedOperationException 调用是否对地图没有影响。 例如, #putAll(Map) 如果映射的映射为“叠加”的映射为空,则调用不可修改的映射可能会引发异常,但不需要调用该方法。

某些映射实现对它们可能包含的键和值有限制。 例如,某些实现禁止 null 键和值,有些实现对其键的类型有限制。 尝试插入不符合资格的键或值会引发未检查的异常,通常 NullPointerExceptionClassCastException。 尝试查询是否存在不符合资格的键或值可能会引发异常,或者可能只返回 false;某些实现将展示前一种行为,一些实现将展示后者。 更通常,尝试对不符合资格的键或值执行操作,其完成不会导致将不合格元素插入映射可能会引发异常,也可能在实现选项中成功。 此接口的规范中将此类异常标记为“可选”。

集合框架接口中的许多方法在方法中 Object#equals(Object) equals 定义。 例如,该方法的#containsKey(Object) containsKey(Object key)规范显示:“仅当此映射包含这样的键k的映射时,才会返回true(key==null ? k==null : key.equals(k)) 不应解释此规范,以暗示使用非 null 参数key调用Map.containsKey将导致key.equals(k)对任何键k调用。 实现可以自由实现优化 equals ,例如,通过首先比较两个键的哈希代码来避免调用。 (该 Object#hashCode() 规范保证具有不相等哈希代码的两个对象不能相等。更普遍的是,无论实现者认为它合适,都能自由地利用基础 Object 方法的指定行为。

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

<h2>“unmodifiable”>Unmodifiable Maps</h2>

Map#ofEntries(Map.Entry...) Map.ofEntries静态Map#of() Map.ofMap#copyOf Map.copyOf工厂方法提供了一种创建不可修改的映射的便捷方法。 Map这些方法创建的实例具有以下特征:

<ul><li>它们是 <不可>修改<的/i>。 无法添加、删除或更新键和值。 在映射上调用任何可变器方法将始终引发 UnsupportedOperationException 。 但是,如果包含的键或值本身是可变的,这可能会导致 Map 的行为不一致或其内容似乎发生更改。 <li>它们禁止 null 键和值。 尝试使用 null 键或值创建它们将导致 NullPointerException。 <如果>所有键和值都是可序列化的,则 li 它们可序列化。 <li>在创建时拒绝重复密钥。 传递给静态工厂方法的重复键会导致 IllegalArgumentException。 <li>映射的迭代顺序未指定,并且可能会更改。 <li>它们是基于值的。 程序员应将 #equals(Object)等于可交换的实例视为可互换的实例,不应将其用于同步,或者可能发生不可预知的行为。 例如,在将来的版本中,同步可能会失败。 调用方不应假设返回的实例的标识。 工厂可以免费创建新实例或重复使用现有实例。 <li>它们按 序列化窗体 页上的指定进行序列化。 </ul>

此接口是 Java Collections Framework 的成员。

已在 1.2 中添加。

Java文档java.util.Map

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

属性

名称 说明
Handle

获取基础 Android 对象的 JNI 值。

(继承自 IJavaObject)
IsEmpty

返回此映射是否为空。

JniIdentityHashCode

返回包装实例的值 java.lang.System.identityHashCode()

(继承自 IJavaPeerable)
JniManagedPeerState

托管对等方的状态。

(继承自 IJavaPeerable)
JniPeerMembers

成员访问和调用支持。

(继承自 IJavaPeerable)
PeerReference

返回JniObjectReference包装的Java对象实例。

(继承自 IJavaPeerable)

方法

名称 说明
Clear()

从此映射中删除所有映射(可选操作)。

Compute(Object, IBiFunction)

尝试计算指定键及其当前映射值的映射(如果没有 null 当前映射)。

ComputeIfAbsent(Object, IFunction)

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

ComputeIfPresent(Object, IBiFunction)

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

ContainsKey(Object)

如果 true 此映射包含指定键的映射,则返回。

ContainsValue(Object)

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

CopyOf(IDictionary)

返回包含给定映射的条目的不可修改的映射。

Disposed()

在释放实例时调用。

(继承自 IJavaPeerable)
DisposeUnlessReferenced()

如果没有对此实例的未完成引用,则调用 Dispose();否则不执行任何操作。

(继承自 IJavaPeerable)
Entry(Object, Object)

返回包含给定键和值的不可变 Entry 值。

EntrySet()

返回 Set 此映射中包含的映射的视图。

Equals(Object)

将指定的对象与此映射进行比较,以便相等。

Finalized()

在实例完成时调用。

(继承自 IJavaPeerable)
ForEach(IBiConsumer)

为此映射中的每个条目执行给定的操作,直到处理完所有条目或该操作引发异常。

Get(Object)

返回指定键映射到的值,或者 null 此映射不包含键的映射。

GetHashCode()

返回此映射的哈希代码值。

GetOrDefault(Object, Object)

返回指定键映射到的值,或者 defaultValue 此映射不包含键的映射。

KeySet()

返回 Set 此映射中包含的键的视图。

Merge(Object, Object, IBiFunction)

如果指定的键尚未与值关联或与 null 相关联,则将其与给定的非 null 值相关联。

Of()

返回包含零映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

返回包含十个映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

返回包含九个映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

返回包含八个映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

返回包含七个映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

返回包含六个映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

返回包含五个映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object)

返回包含四个映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object)

返回包含三个映射的不可修改映射。

Of(Object, Object, Object, Object)

返回包含两个映射的不可修改映射。

Of(Object, Object)

返回包含单个映射的不可修改映射。

OfEntries(IMapEntry[])

返回一个不可变映射,其中包含从给定条目中提取的键和值。

Put(Object, Object)

将此映射中的指定值与指定键相关联(可选操作)。

PutAll(IDictionary)

将所有映射从指定的映射复制到此映射(可选操作)。

PutIfAbsent(Object, Object)

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

Remove(Object, Object)

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

Remove(Object)

如果存在键(可选操作),则从此映射中删除键的映射。

Replace(Object, Object, Object)

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

Replace(Object, Object)

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

ReplaceAll(IBiFunction)

将每个条目的值替换为在该条目上调用给定函数的结果,直到处理完所有条目或函数引发异常。

SetJniIdentityHashCode(Int32)

设置由 JniIdentityHashCode. 返回的值。

(继承自 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

将键映射到值的一个对象。

(继承自 IJavaPeerable)
SetPeerReference(JniObjectReference)

设置由 PeerReference. 返回的值。

(继承自 IJavaPeerable)
Size()

返回此映射中的键值映射数。

UnregisterFromRuntime()

取消注册此实例,使运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。

(继承自 IJavaPeerable)
Values()

返回 Collection 此映射中包含的值的视图。

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

将键映射到值的一个对象。

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于