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
类)则不保证。
注意:如果将可变对象用作映射键,则必须非常小心。 如果对象的值以影响 equals
比较的方式更改,而对象是映射中的键,则不指定映射的行为。 此禁令的一个特殊情况是,不允许地图将自身作为键包含在内。 虽然允许地图将自身作为值进行包含,但建议格外小心: equals
在此类地图上不再很好地定义 和 hashCode
方法。
所有常规用途映射实现类都应提供两个“标准”构造函数:一个 void (无参数) 构造函数(用于创建空映射)和一个构造函数,一个具有单个类型 Map
参数的构造函数,后者使用与其参数相同的键值映射创建新映射。 实际上,后一个构造函数允许用户复制任何映射,从而生成所需类的等效映射。 无法 (强制实施此建议,因为接口不能包含构造函数) 但 JDK 中的所有常规用途映射实现都符合要求。
如果此映射不支持操作,则指定在此接口中包含的“破坏性”方法(即修改它们所操作的映射的方法)引发 UnsupportedOperationException
。 如果是这种情况,如果调用对地图没有影响,则这些方法可能会引发 UnsupportedOperationException
(但不是必需的) 。 例如,如果映射要“叠加”的映射为空,则在不可修改的映射上调用 #putAll(Map)
方法可能会引发异常,但不是必需的。
某些映射实现对它们可能包含的键和值有限制。 例如,某些实现禁止 null 键和值,有些实现对其键类型有限制。 尝试插入不合格的键或值会引发未选中的异常,通常为 NullPointerException
或 ClassCastException
。 尝试查询是否存在不合格的键或值可能会引发异常,或者可能只返回 false;一些实现将展示前一种行为,而有些则显示后者。 更一般地,尝试对不合格的键或值(其完成不会导致将不合格元素插入映射)的操作可能会引发异常,或者它可能会成功(在实现的选项下)。 此类异常在此接口的规范中标记为“可选”。
集合框架接口中的许多方法都是根据 Object#equals(Object) equals
方法定义的。 例如,方法的#containsKey(Object) containsKey(Object key)
规范显示:“仅当且仅当此映射包含这样的(key==null ? k==null : key.equals(k))
键k
的映射时,才会返回 true
。 不应将此规范解释为暗示使用非 null 参数key
调用Map.containsKey
将导致key.equals(k)
调用任何键 k
。 实现可以自由实现可避免调用的 equals
优化,例如,首先比较两个键的哈希代码。 (规范 Object#hashCode()
保证具有不相等哈希代码的两个对象不能相等。) 更一般地,各种集合框架接口的实现可在实现者认为合适的任何位置自由利用基础 Object
方法的指定行为。
某些对映射执行递归遍历的映射操作可能会失败,但对于地图直接或间接包含自身的自引用实例,则异常。 这包括 clone()
、 equals()
hashCode()
和 toString()
方法。 实现可以选择性地处理自引用方案,但大多数当前的实现不会这样做。
<h2>“unmodifiable”>Unmodifiable Maps</h2>
Map#of() Map.of
、 Map#ofEntries(Map.Entry...) Map.ofEntries
和 Map#copyOf Map.copyOf
静态工厂方法提供了一种创建不可修改的映射的便捷方法。 这些 Map
方法创建的实例具有以下特征:
<ul>li 他们是 i unmodifiable</i>.><>< 无法添加、删除或更新键和值。 在 Map 上调用任何 mutator 方法始终会导致 UnsupportedOperationException
引发。 但是,如果包含的键或值本身是可变的,这可能会导致映射的行为不一致或其内容看起来发生更改。 <li>它们不允许 null
键和值。 尝试使用 null
键或值创建它们会导致 NullPointerException
。 <如果>所有键和值都是可序列化的,则它们可序列化。 <li>它们在创建时拒绝重复密钥。 传递给静态工厂方法的重复键会导致 出现 IllegalArgumentException
。 <li>映射的迭代顺序未指定,可能会发生更改。 <li>它们是基于值的。 程序员应将 #equals (对象) 的实例视为可互换的实例,不应将其用于同步,否则可能会出现不可预知的行为。 例如,在将来的版本中,同步可能会失败。 调用方不应对返回的实例的标识做出假设。 工厂可以自由创建新实例或重复使用现有实例。 <li>它们按序列化窗体页上的指定进行 序列化 。 </ul>
此接口是 Java 集合框架的成员。
在 1.2 中添加。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
属性
Handle |
获取基础 Android 对象的 JNI 值。 (继承自 IJavaObject) |
IsEmpty |
返回此映射是否为空。 |
JniIdentityHashCode |
返回包装实例的 的值 |
JniManagedPeerState |
托管对等方的状态。 (继承自 IJavaPeerable) |
JniPeerMembers |
成员访问和调用支持。 (继承自 IJavaPeerable) |
PeerReference |
返回 JniObjectReference 包装的 Java 对象实例的 。 (继承自 IJavaPeerable) |
方法
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
将键映射到值的 对象。 |
GetJniTypeName(IJavaPeerable) |
将键映射到值的 对象。 |