IMap 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将键映射到值的一个对象。
[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 键和值,有些实现对其键的类型有限制。 尝试插入不符合资格的键或值会引发未检查的异常,通常 NullPointerException 或 ClassCastException。 尝试查询是否存在不符合资格的键或值可能会引发异常,或者可能只返回 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 中添加。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
属性
| 名称 | 说明 |
|---|---|
| Handle |
获取基础 Android 对象的 JNI 值。 (继承自 IJavaObject) |
| IsEmpty |
返回此映射是否为空。 |
| JniIdentityHashCode |
返回包装实例的值 |
| JniManagedPeerState |
托管对等方的状态。 (继承自 IJavaPeerable) |
| JniPeerMembers |
成员访问和调用支持。 (继承自 IJavaPeerable) |
| PeerReference |
返回JniObjectReference包装的Java对象实例。 (继承自 IJavaPeerable) |
方法
扩展方法
| 名称 | 说明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
获取实例 |
| JavaAs<TResult>(IJavaPeerable) |
尝试强制 |
| JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
| JavaCast<TResult>(IJavaObject) |
将键映射到值的一个对象。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
尝试强制 |