IdentityHashMap 类

定义

此类使用哈希表实现 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
继承
IdentityHashMap
属性
实现

注解

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。 换句话说,在一个键中,两个IdentityHashMapk1k2被视为相等(如果且仅当)。(k1==k2) (在正常 Map 实现中(如 HashMap) 两个键 k1k2 仅当和仅当 . (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

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
IsEmpty

要添加

(继承自 AbstractMap)
JniIdentityHashCode

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
JniPeerMembers

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

PeerReference

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

ThresholdType

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

方法

名称 说明
Clear()

要添加

(继承自 AbstractMap)
Clone()

返回此标识哈希映射的浅表副本:不会克隆键和值本身。

ContainsKey(Object)

要添加

(继承自 AbstractMap)
ContainsValue(Object)

要添加

(继承自 AbstractMap)
Dispose()

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
Dispose(Boolean)

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
EntrySet()

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

Equals(Object)

指示其他对象是否“等于”此对象。

(继承自 Object)
ForEach(IBiConsumer)

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

Get(Object)

要添加

(继承自 AbstractMap)
GetHashCode()

返回对象的哈希代码值。

(继承自 Object)
JavaFinalize()

当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。

(继承自 Object)
KeySet()

要添加

(继承自 AbstractMap)
Notify()

唤醒正在等待此对象的监视器的单个线程。

(继承自 Object)
NotifyAll()

唤醒正在等待此对象的监视器的所有线程。

(继承自 Object)
Put(Object, Object)

要添加

(继承自 AbstractMap)
PutAll(IDictionary)

要添加

(继承自 AbstractMap)
Remove(Object, Object)

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

Remove(Object)

要添加

(继承自 AbstractMap)
Replace(Object, Object, Object)

要添加

ReplaceAll(IBiFunction)

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

SetHandle(IntPtr, JniHandleOwnership)

设置 Handle 属性。

(继承自 Object)
Size()

要添加

(继承自 AbstractMap)
ToArray<T>()

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
ToString()

返回对象的字符串表示形式。

(继承自 Object)
UnregisterFromRuntime()

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
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()

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
IJavaPeerable.DisposeUnlessReferenced()

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
IJavaPeerable.Finalized()

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
IJavaPeerable.JniManagedPeerState

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

(继承自 Object)

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

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

JavaAs<TResult>(IJavaPeerable)

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

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

此类使用哈希表实现 Map 接口,在比较键(和值)时使用引用相等性代替对象相等性。

TryJavaCast<TResult>(IJavaPeerable, TResult)

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

适用于