HashMap 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
接口的基于哈希表的 Map
实现。
[Android.Runtime.Register("java/util/HashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class HashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Lang.ICloneable
[<Android.Runtime.Register("java/util/HashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type HashMap = class
inherit AbstractMap
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ICloneable
interface IMap
- 继承
- 派生
- 属性
- 实现
注解
接口的基于哈希表的 Map
实现。 此实现提供所有可选的映射操作,并允许 null
值和 null
键。 (类 HashMap
大致等效于 Hashtable
,只是它未同步且允许 nulls.) 此类不保证映射的顺序;特别是,它不保证顺序会随时间推移保持不变。
此实现为基本操作提供恒定时间性能, (get
和 put
) ,假设哈希函数在存储桶之间正确分散元素。 对集合视图进行迭代所需的时间与实例的 HashMap
“容量”成正比, () 存储桶数及其大小 () 键值映射数。 因此,如果迭代性能很重要,则不要将初始容量设置为过高 (或负载因子过低) 非常重要。
实例 HashMap
有两个影响其性能的参数: 初始容量 和 负载因子。 容量是哈希表中的存储桶数,初始容量只是创建哈希表时的容量。 负载因子衡量哈希表在自动增加其容量之前允许其获取的满度。 当哈希表中的条目数超过负载因子和当前容量的乘积时,哈希 表 (即) 重新生成内部数据结构,使哈希表具有大约两倍的存储桶数。
一般情况下,默认负载因子 (.75) 在时间和空间成本之间提供了很好的权衡。 较高的值会减少空间开销,但会增加查找成本, (在类的大多数操作 HashMap
(包括 get
和 put
) )中反映出来。 设置初始容量时,应考虑映射中预期的条目数及其负载因子,以最大程度地减少重合操作数。 如果初始容量大于最大条目数除以负载因子,则不会发生任何重排操作。
如果要将许多映射存储在实例 HashMap
中,则创建具有足够大容量的映射可以更有效地存储映射,而不是让它根据需要执行自动重排以增加表。 请注意,使用多个具有相同 hashCode()
的键是降低任何哈希表性能的一种肯定方法。 为了改善影响,当键为 Comparable
时,此类可以使用键之间的比较顺序来帮助打破关系。
<强>请注意,此实现不同步。</strong> 如果多个线程同时访问哈希映射,并且至少有一个线程在结构上修改了该映射, 则必须 在外部同步该映射。 (结构修改是添加或删除一个或多个映射的任何操作;仅更改与实例已包含的键关联的值不是结构修改。) 这通常是通过在自然封装映射的某个对象上同步来实现的。
如果不存在此类对象,则应使用 Collections#synchronizedMap Collections.synchronizedMap
方法“包装”映射。 最好在创建时执行此操作,以防止意外对地图进行非同步访问:
Map m = Collections.synchronizedMap(new HashMap(...));
此类的所有“集合视图方法”返回的迭代器是 快速失败的:如果在创建迭代器后的任何时间对映射进行结构修改,则除通过迭代器自己的 remove
方法之外的任何方式,迭代器将引发 ConcurrentModificationException
。 因此,面对并发修改,迭代器会快速且干净地失败,而不会在将来不确定的时间冒着任意、非确定性行为的风险。
请注意,无法保证迭代器的快速故障行为,因为一般来说,在出现非同步并发修改的情况下,不可能做出任何硬性保证。 故障快速迭代器会尽最大努力引发 ConcurrentModificationException
。 因此,编写依赖于此异常的程序的正确性是错误的: 迭代器的快速故障行为应仅用于检测 bug。
此类是 Java 集合框架的成员。
在 1.2 中添加。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
构造函数
HashMap() |
构造一个空 |
HashMap(IDictionary) |
使用与指定的 |
HashMap(Int32) |
构造具有指定初始容量和默认负载因子 (0 的空 |
HashMap(Int32, Single) |
构造具有指定初始容量和负载因子的空 |
HashMap(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() |
返回此 |
Compute(Object, IBiFunction) |
接口的基于哈希表的 |
ComputeIfAbsent(Object, IFunction) |
接口的基于哈希表的 |
ComputeIfPresent(Object, IBiFunction) |
接口的基于哈希表的 |
ContainsKey(Object) |
要添加 (继承自 AbstractMap) |
ContainsValue(Object) |
要添加 (继承自 AbstractMap) |
Dispose() |
接口的基于哈希表的 |
Dispose(Boolean) |
接口的基于哈希表的 |
EntrySet() |
返回 |
Equals(Object) |
指示其他某个对象是否“等于”此对象。 (继承自 Object) |
ForEach(IBiConsumer) |
接口的基于哈希表的 |
Get(Object) |
要添加 (继承自 AbstractMap) |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
GetOrDefault(Object, Object) |
接口的基于哈希表的 |
JavaFinalize() |
当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
KeySet() |
要添加 (继承自 AbstractMap) |
Merge(Object, Object, IBiFunction) |
接口的基于哈希表的 |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
Put(Object, Object) |
要添加 (继承自 AbstractMap) |
PutAll(IDictionary) |
要添加 (继承自 AbstractMap) |
PutIfAbsent(Object, Object) |
接口的基于哈希表的 |
Remove(Object) |
要添加 (继承自 AbstractMap) |
Remove(Object, Object) |
从此映射中删除指定键的映射(如果存在)。 |
Replace(Object, Object) |
接口的基于哈希表的 |
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) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> (继承自 Object) |
显式接口实现
IJavaPeerable.Disposed() |
接口的基于哈希表的 |
IJavaPeerable.DisposeUnlessReferenced() |
接口的基于哈希表的 |
IJavaPeerable.Finalized() |
接口的基于哈希表的 |
IJavaPeerable.JniManagedPeerState |
接口的基于哈希表的 |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
接口的基于哈希表的 |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
接口的基于哈希表的 |
IJavaPeerable.SetPeerReference(JniObjectReference) |
接口的基于哈希表的 |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
接口的基于哈希表的 |
GetJniTypeName(IJavaPeerable) |
接口的基于哈希表的 |