Share via


HashMap 类

定义

接口的基于哈希表的 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.) 此类不保证映射的顺序;特别是,它不保证顺序会随时间推移保持不变。

此实现为基本操作提供恒定时间性能, (getput) ,假设哈希函数在存储桶之间正确分散元素。 对集合视图进行迭代所需的时间与实例的 HashMap “容量”成正比, () 存储桶数及其大小 () 键值映射数。 因此,如果迭代性能很重要,则不要将初始容量设置为过高 (或负载因子过低) 非常重要。

实例 HashMap 有两个影响其性能的参数: 初始容量负载因子容量是哈希表中的存储桶数,初始容量只是创建哈希表时的容量。 负载因子衡量哈希表在自动增加其容量之前允许其获取的满度。 当哈希表中的条目数超过负载因子和当前容量的乘积时,哈希 表 (即) 重新生成内部数据结构,使哈希表具有大约两倍的存储桶数。

一般情况下,默认负载因子 (.75) 在时间和空间成本之间提供了很好的权衡。 较高的值会减少空间开销,但会增加查找成本, (在类的大多数操作 HashMap (包括 getput) )中反映出来。 设置初始容量时,应考虑映射中预期的条目数及其负载因子,以最大程度地减少重合操作数。 如果初始容量大于最大条目数除以负载因子,则不会发生任何重排操作。

如果要将许多映射存储在实例 HashMap 中,则创建具有足够大容量的映射可以更有效地存储映射,而不是让它根据需要执行自动重排以增加表。 请注意,使用多个具有相同 hashCode() 的键是降低任何哈希表性能的一种肯定方法。 为了改善影响,当键为 Comparable时,此类可以使用键之间的比较顺序来帮助打破关系。

<强>请注意,此实现不同步。</strong> 如果多个线程同时访问哈希映射,并且至少有一个线程在结构上修改了该映射, 则必须 在外部同步该映射。 (结构修改是添加或删除一个或多个映射的任何操作;仅更改与实例已包含的键关联的值不是结构修改。) 这通常是通过在自然封装映射的某个对象上同步来实现的。

如果不存在此类对象,则应使用 Collections#synchronizedMap Collections.synchronizedMap 方法“包装”映射。 最好在创建时执行此操作,以防止意外对地图进行非同步访问:

Map m = Collections.synchronizedMap(new HashMap(...));

此类的所有“集合视图方法”返回的迭代器是 快速失败的:如果在创建迭代器后的任何时间对映射进行结构修改,则除通过迭代器自己的 remove 方法之外的任何方式,迭代器将引发 ConcurrentModificationException。 因此,面对并发修改,迭代器会快速且干净地失败,而不会在将来不确定的时间冒着任意、非确定性行为的风险。

请注意,无法保证迭代器的快速故障行为,因为一般来说,在出现非同步并发修改的情况下,不可能做出任何硬性保证。 故障快速迭代器会尽最大努力引发 ConcurrentModificationException 。 因此,编写依赖于此异常的程序的正确性是错误的: 迭代器的快速故障行为应仅用于检测 bug。

此类是 Java 集合框架的成员。

在 1.2 中添加。

java.util.HashMapJava 文档。

此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。

构造函数

HashMap()

构造一个空 HashMap 的 ,默认初始容量 (16) ,默认负载因子 (0。

HashMap(IDictionary)

使用与指定的 Map相同的映射构造新的 HashMap

HashMap(Int32)

构造具有指定初始容量和默认负载因子 (0 的空 HashMap

HashMap(Int32, Single)

构造具有指定初始容量和负载因子的空 HashMap 值。

HashMap(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()

返回此 HashMap 实例的浅表副本:键和值本身未克隆。

Compute(Object, IBiFunction)

接口的基于哈希表的 Map 实现。

ComputeIfAbsent(Object, IFunction)

接口的基于哈希表的 Map 实现。

ComputeIfPresent(Object, IBiFunction)

接口的基于哈希表的 Map 实现。

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)
GetOrDefault(Object, Object)

接口的基于哈希表的 Map 实现。

JavaFinalize()

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

(继承自 Object)
KeySet()

要添加

(继承自 AbstractMap)
Merge(Object, Object, IBiFunction)

接口的基于哈希表的 Map 实现。

Notify()

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

(继承自 Object)
NotifyAll()

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

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

要添加

(继承自 AbstractMap)
PutAll(IDictionary)

要添加

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

接口的基于哈希表的 Map 实现。

Remove(Object)

要添加

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

从此映射中删除指定键的映射(如果存在)。

Replace(Object, Object)

接口的基于哈希表的 Map 实现。

Replace(Object, Object, Object)

接口的基于哈希表的 Map 实现。

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)

导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>

(继承自 Object)
Wait(Int64, Int32)

导致当前线程等待,直到它被唤醒,通常是通过 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)

扩展方法

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

接口的基于哈希表的 Map 实现。

GetJniTypeName(IJavaPeerable)

接口的基于哈希表的 Map 实现。

适用于