WeakHashMap 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
基于接口的 Map 哈希表实现,其中 <em>弱键</em>。
[Android.Runtime.Register("java/util/WeakHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class WeakHashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/WeakHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type WeakHashMap = class
inherit AbstractMap
interface IMap
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 继承
- 属性
- 实现
注解
基于接口的 Map 哈希表实现,其中 <em>弱键</em>。 当项不再处于普通使用中时,将自动删除某个 WeakHashMap 条目。 更确切地说,给定密钥的映射的存在不会阻止垃圾回收器丢弃该密钥,即,使可完成、最终完成,然后回收。 当某个键被丢弃时,其条目实际上已从映射中删除,因此此类的行为与其他实现略有不同 Map 。
支持 null 值和 null 键。 此类的性能特征类似于类的性能HashMap特征,并且具有 em>初始容量</em> 和 <em>负载因子</em> 的<相同效率参数。
与大多数集合类一样,此类不会同步。 可以使用该方法Collections#synchronizedMap Collections.synchronizedMap构造同步WeakHashMap。
此类主要用于使用运算符测试对象标识==的方法的关键对象equals。 一旦放弃此类密钥,就永远无法重新创建它,因此不可能在一段时间后在该键中 WeakHashMap 查找该键,并惊讶地发现其条目已被删除。 此类非常适用于那些 equals 方法不基于对象标识(例如 String 实例)的关键对象。 但是,有了此类可重新创建的关键对象,自动删除 WeakHashMap 其键已被丢弃的条目可能会令人困惑。
类的行为 WeakHashMap 部分取决于垃圾回收器的操作,因此一些熟悉的(虽然不需要) Map 固定器不保留此类。 由于垃圾回收器可能随时放弃密钥,因此 WeakHashMap 可能的行为就像未知线程以无提示方式删除条目一样。 具体而言,即使你在实例上WeakHashMap同步并调用其任何互变量方法,方法也有可能size随时间推移返回较小的值,isEmpty然后返回该方法false,然后返回给定键,然后truecontainsKeyfalsetrue返回给定键get的方法,以便该方法返回一个值,但稍后返回。nullput用于返回null的方法和remove返回之前出现在地图中的键的方法false,以及键集的连续检查、值集合和条目集以生成连续较小的元素数。
中的每个 WeakHashMap 键对象间接存储为弱引用的引用。 因此,只有在地图内外的弱引用被垃圾回收器清除后,才会自动删除键。
<strong Implementation note:</strong The value objects in a WeakHashMap are held by commony strong>> references. 因此,应注意确保值对象不会直接或间接地引用自己的键,因为这将阻止丢弃密钥。 请注意,值对象可以通过自身间接引用其键 WeakHashMap ;也就是说,值对象可能强指一些其他键对象,其关联的值对象反过来又强指第一个值对象的键。 如果映射中的值不依赖于对它们的强引用的映射,则处理此方法的一种方法是在插入之前包装值本身 WeakReferences ,如以下所示 m.put(key, new WeakReference(value)),然后对每个 get值进行解包。
由 iterator 此类的所有“集合视图方法”返回的集合方法返回的迭代器都是 失败的:如果在创建迭代器后随时对映射进行结构修改, remove 则迭代器将引发一个 ConcurrentModificationException。 因此,面对并发修改,迭代器会在将来不确定的时间快速、干净地失败,而不是冒着任意的不确定行为的风险。
请注意,迭代器的故障快速行为无法保证,一般来说,在出现非同步并发修改时,无法做出任何硬保证。 故障快速迭代器会尽力引发 ConcurrentModificationException 。 因此,编写依赖于此异常的程序的正确性是错误的:迭代 器的故障快速行为应仅用于检测 bug。
此类是 Java Collections Framework 的成员。
已在 1.2 中添加。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
构造函数
| 名称 | 说明 |
|---|---|
| WeakHashMap() |
构造具有默认初始容量(16)和负载因子(0)的新空 |
| WeakHashMap(IDictionary) |
使用与指定映射相同的映射构造一个新 |
| WeakHashMap(Int32, Single) |
使用给定的初始容量和给定的负载因子构造一个新的空 |
| WeakHashMap(Int32) |
使用给定的初始容量和默认负载因子(0)构造一个新的空 |
| WeakHashMap(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() |
创建并返回此对象的副本。 (继承自 Object) |
| ContainsKey(Object) |
要添加 (继承自 AbstractMap) |
| ContainsValue(Object) |
要添加 (继承自 AbstractMap) |
| Dispose() |
基于接口的 |
| Dispose(Boolean) |
基于接口的 |
| EntrySet() |
返回 |
| Equals(Object) |
指示其他对象是否“等于”此对象。 (继承自 Object) |
| ForEach(IBiConsumer) |
基于接口的 |
| Get(Object) |
要添加 (继承自 AbstractMap) |
| GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
| JavaFinalize() |
当垃圾回收确定不再引用该对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
| KeySet() |
要添加 (继承自 AbstractMap) |
| NewWeakHashMap(Int32) |
基于接口的 |
| Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
| NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
| Put(Object, Object) |
要添加 (继承自 AbstractMap) |
| PutAll(IDictionary) |
要添加 (继承自 AbstractMap) |
| Remove(Object) |
要添加 (继承自 AbstractMap) |
| 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) |
尝试强制 |