IdentityHashMap 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。
[Android.Runtime.Register("java/util/IdentityHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class IdentityHashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Lang.ICloneable
[<Android.Runtime.Register("java/util/IdentityHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type IdentityHashMap = class
inherit AbstractMap
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ICloneable
interface IMap
- 继承
- 属性
- 实现
注解
此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。 换句话说,在一个键中,两个IdentityHashMap键k1k2被视为相等(如果且仅当)。(k1==k2) (在正常 Map 实现中(如 HashMap) 两个键 k1 , k2 仅当和仅当 . (k1==null ? k2==null : k1.equals(k2))) 时,被视为相等。
<b>此类 不是 常规用途 Map 实现! 虽然此类实现 Map 接口,但它故意违反 Map's 常规协定,这要求在比较对象时使用 equals 该方法。 此类仅用于需要引用相等语义的极少数情况下使用。</b>
此映射的视图集合也对其元素具有引用相等语义。 有关详细信息,values() valuesentrySet() entrySet请参阅和keySet() keySet方法。
此类的典型用法是 拓扑保留对象图形转换,例如序列化或深层复制。 若要执行此类转换,程序必须维护一个“节点表”,以跟踪已处理的所有对象引用。 节点表不得等同于不同的对象,即使它们恰好相等。 此类的另一个典型用途是维护 代理对象。 例如,调试工具可能希望为正在调试的程序中的每个对象维护代理对象。
此类提供所有可选映射操作,并允许 null 值和 null 键。 此类不保证地图的顺序;具体而言,它不能保证顺序在一段时间内保持不变。
此类为基本操作(以及put)提供常量时间性能,get假设系统标识哈希函数(System#identityHashCode(Object))在存储桶中正确分散元素。
此类有一个优化参数(这会影响性能,但不影响语义): 预期的最大大小。 此参数是映射应保留的最大键值映射数。 在内部,此参数用于确定最初包含哈希表的存储桶数。 未指定预期最大大小与存储桶数之间的精确关系。
如果映射的大小(键值映射的数量)足以超过预期的最大大小,则会增加存储桶数。 增加桶数(“重装”)可能相当昂贵,因此创建具有足够大预期最大大小的标识哈希映射需要付出代价。 另一方面,对集合视图的迭代需要与哈希表中存储桶数成正比的时间,因此,如果特别关心迭代性能或内存使用量,则无需设置预期的最大大小过高。
<强>请注意,此实现未同步。</strong> 如果多个线程同时访问标识哈希映射,并且至少有一个线程在结构上修改映射 ,则必须在 外部同步该映射。 (结构修改是添加或删除一个或多个映射的任何操作;仅更改与实例已包含的键关联的值不是结构修改。这通常是通过在自然封装地图的某些对象上进行同步来实现的。
如果不存在此类对象,则应使用 Collections#synchronizedMap Collections.synchronizedMap 该方法“包装”映射。 最好在创建时完成此操作,以防止意外的未同步访问地图:
Map m = Collections.synchronizedMap(new IdentityHashMap(...));
由 iterator 此类的所有“集合视图方法”返回的集合方法返回的迭代器都是 失败的:如果在创建迭代器后随时对映射进行结构修改, remove 则迭代器将引发一个 ConcurrentModificationException。 因此,面对并发修改,迭代器会在将来不确定的时间快速、干净地失败,而不是冒着任意的不确定行为的风险。
请注意,迭代器的故障快速行为无法保证,一般来说,在出现非同步并发修改时,无法做出任何硬保证。 故障快速迭代器会尽力引发 ConcurrentModificationException 。 因此,编写依赖于此异常的程序的正确性是错误的: 故障快速迭代器应仅用于检测 bug。
此类是 Java Collections Framework 的成员。
在 1.4 中添加。
Java文档java.util.IdentityHashMap。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
构造函数
| 名称 | 说明 |
|---|---|
| IdentityHashMap() |
构造具有默认预期最大大小(21)的新空标识哈希映射。 |
| IdentityHashMap(IDictionary) |
构造一个新的标识哈希映射,其中包含指定映射中的键值映射。 |
| IdentityHashMap(Int32) |
构造具有指定预期最大大小的新的空映射。 |
| IdentityHashMap(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
属性
| 名称 | 说明 |
|---|---|
| Class |
返回此 |
| Handle |
基础 Android 实例的句柄。 (继承自 Object) |
| IsEmpty |
要添加 (继承自 AbstractMap) |
| JniIdentityHashCode |
此类使用哈希表实现 |
| JniPeerMembers |
此类使用哈希表实现 |
| PeerReference |
此类使用哈希表实现 |
| ThresholdClass |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
| ThresholdType |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
方法
| 名称 | 说明 |
|---|---|
| Clear() |
要添加 (继承自 AbstractMap) |
| Clone() |
返回此标识哈希映射的浅表副本:不会克隆键和值本身。 |
| ContainsKey(Object) |
要添加 (继承自 AbstractMap) |
| ContainsValue(Object) |
要添加 (继承自 AbstractMap) |
| Dispose() |
此类使用哈希表实现 |
| Dispose(Boolean) |
此类使用哈希表实现 |
| EntrySet() |
返回 |
| Equals(Object) |
指示其他对象是否“等于”此对象。 (继承自 Object) |
| ForEach(IBiConsumer) |
此类使用哈希表实现 |
| Get(Object) |
要添加 (继承自 AbstractMap) |
| GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
| JavaFinalize() |
当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
| KeySet() |
要添加 (继承自 AbstractMap) |
| Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
| NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
| Put(Object, Object) |
要添加 (继承自 AbstractMap) |
| PutAll(IDictionary) |
要添加 (继承自 AbstractMap) |
| Remove(Object, Object) |
此类使用哈希表实现 |
| Remove(Object) |
要添加 (继承自 AbstractMap) |
| Replace(Object, Object, Object) |
要添加 |
| ReplaceAll(IBiFunction) |
此类使用哈希表实现 |
| SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
| Size() |
要添加 (继承自 AbstractMap) |
| ToArray<T>() |
此类使用哈希表实现 |
| ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
| UnregisterFromRuntime() |
此类使用哈希表实现 |
| Values() |
要添加 (继承自 AbstractMap) |
| Wait() |
使当前线程等待,直到唤醒它,通常是通过 em 通知/em< 或 >em<interrupted>/em<。><> (继承自 Object) |
| Wait(Int64, Int32) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
| Wait(Int64) |
使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted>/em<>,或直到经过一定数量的实时。 (继承自 Object) |
显式接口实现
| 名称 | 说明 |
|---|---|
| IJavaPeerable.Disposed() |
此类使用哈希表实现 |
| IJavaPeerable.DisposeUnlessReferenced() |
此类使用哈希表实现 |
| IJavaPeerable.Finalized() |
此类使用哈希表实现 |
| IJavaPeerable.JniManagedPeerState |
此类使用哈希表实现 |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
此类使用哈希表实现 |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此类使用哈希表实现 |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
此类使用哈希表实现 |
扩展方法
| 名称 | 说明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
获取实例 |
| JavaAs<TResult>(IJavaPeerable) |
尝试强制 |
| JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
| JavaCast<TResult>(IJavaObject) |
此类使用哈希表实现 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
尝试强制 |