Hashtable 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
此类实现哈希表,该哈希表将键映射到值。
[Android.Runtime.Register("java/util/Hashtable", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class Hashtable : Java.Util.Dictionary, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Lang.ICloneable, Java.Util.IMap
[<Android.Runtime.Register("java/util/Hashtable", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type Hashtable = class
inherit Dictionary
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ICloneable
interface IMap
- 继承
- 属性
- 实现
注解
此类实现哈希表,该哈希表将键映射到值。 任何非null
对象都可以用作键或值。
若要从哈希表成功存储和检索对象,用作键的对象必须实现 hashCode
方法和 equals
方法。
实例 Hashtable
有两个影响其性能的参数: 初始容量 和 负载因子。 容量是哈希表中的存储桶数,初始容量只是创建哈希表时的容量。 请注意,哈希表处于 打开状态:在发生“哈希冲突”时,单个存储桶存储多个条目,必须按顺序搜索这些条目。 负载因子衡量哈希表在自动增加其容量之前允许其获取的满度。 初始容量和负载因子参数只是实现的提示。 有关何时以及是否调用 rehash 方法的确切详细信息取决于实现。
通常,默认负载因子 (.75) 在时间和空间成本之间提供很好的权衡。 较高的值会减少空间开销,但会增加查找条目 (的时间成本,这反映在大多数 Hashtable
操作(包括 get
和 put
) ) 中。
初始容量控制浪费空间与操作需求 rehash
之间的权衡,这很耗时。 如果初始容量大于 将包含的最大条目Hashtable
数除以其负载因子,则不会发生任何rehash
操作。 但是,将初始容量设置为过高可能会浪费空间。
如果要将许多条目制成 , Hashtable
则创建具有足够大容量的条目可以更有效地插入条目,而不是让它根据需要执行自动重排以增加表。
此示例创建数字的哈希表。 它使用数字的名称作为键:
{@code
Hashtable<String, Integer> numbers
= new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);}
若要检索数字,请使用以下代码:
{@code
Integer n = numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}}
由 iterator
此类的所有“集合视图方法”返回的集合的 方法返回的迭代器为 <em>fail-fast</em>:如果在创建迭代器后随时对哈希表进行结构修改(除了通过迭代器自己的 remove
方法之外的任何方式),则迭代器将引发 ConcurrentModificationException
。 因此,面对并发修改,迭代器会快速且干净地失败,而不会在将来不确定的时间冒着任意、非确定性行为的风险。 Hashtable 的 和 方法返回的#keys keys
枚举不是<<>/不>快速的;如果在创建枚举后随时对哈希表进行结构修改,则枚举结果未定义。#elements elements
请注意,无法保证迭代器的快速故障行为,因为一般来说,在出现非同步并发修改的情况下,不可能做出任何硬性保证。 故障快速迭代器会尽最大努力引发 ConcurrentModificationException
。 因此,编写依赖于此异常的程序的正确性是错误的: 迭代器的快速故障行为应仅用于检测 bug。
从 Java 2 平台 v1.2 开始,此类进行了改造以实现 Map
接口,使其成为 的成员
Java 集合框架。 与新的集合实现不同, Hashtable
是同步的。 如果不需要线程安全实现,建议使用 HashMap
代替 Hashtable
。 如果需要线程安全高并发实现,则建议使用 java.util.concurrent.ConcurrentHashMap
代替 Hashtable
。
在 1.0 中添加。
此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。
构造函数
Hashtable() |
构造一个新的空哈希表,其默认初始容量 (11) ,负载因子 (0。 |
Hashtable(IDictionary) |
使用与给定映射相同的映射构造新的哈希表。 |
Hashtable(Int32) |
构造具有指定初始容量和默认负载因子 (0 的新空哈希表。 |
Hashtable(Int32, Single) |
使用指定的初始容量和指定的负载因子构造新的空哈希表。 |
Hashtable(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
属性
Class |
返回此 |
Handle |
基础 Android 实例的句柄。 (继承自 Object) |
IsEmpty |
测试此哈希表是否不将任何键映射到值。 |
JniIdentityHashCode |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
JniPeerMembers |
此类实现哈希表,该哈希表将键映射到值。 |
PeerReference |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
ThresholdClass |
此 API 支持 Mono for Android 基础结构,不应直接从代码使用。 |
ThresholdType |
此 API 支持 Mono for Android 基础结构,不应直接从代码使用。 |
方法
Clear() |
清除此哈希表,使其不包含任何键。 |
Clone() |
创建此哈希表的浅表副本。 |
Compute(Object, IBiFunction) |
要添加 |
ComputeIfAbsent(Object, IFunction) |
要添加 |
ComputeIfPresent(Object, IBiFunction) |
要添加 |
Contains(Object) |
测试某些键是否映射到此哈希表中的指定值。 |
ContainsKey(Object) |
测试指定的对象是否为此哈希表中的键。 |
ContainsValue(Object) |
如果此哈希表将一个或多个键映射到此值,则返回 true。 |
Dispose() |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
Dispose(Boolean) |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
Elements() |
返回此哈希表中值的枚举。 |
EntrySet() |
返回 |
Equals(Object) |
指示其他某个对象是否“等于”此对象。 (继承自 Object) |
ForEach(IBiConsumer) |
此类实现哈希表,该哈希表将键映射到值。 |
Get(Object) |
返回指定键映射到的值,或者 |
GetHashCode() |
返回对象的哈希代码值。 (继承自 Object) |
GetOrDefault(Object, Object) |
此类实现哈希表,该哈希表将键映射到值。 |
JavaFinalize() |
当垃圾回收确定不再引用对象时,由对象上的垃圾回收器调用。 (继承自 Object) |
Keys() |
返回此哈希表中键的枚举。 |
KeySet() |
返回 |
Merge(Object, Object, IBiFunction) |
要添加 |
Notify() |
唤醒正在等待此对象的监视器的单个线程。 (继承自 Object) |
NotifyAll() |
唤醒正在等待此对象的监视器的所有线程。 (继承自 Object) |
Put(Object, Object) |
将指定的 |
PutAll(IDictionary) |
将所有映射从指定映射复制到此哈希表。 |
PutIfAbsent(Object, Object) |
此类实现哈希表,该哈希表将键映射到值。 |
Rehash() |
增加此哈希表的容量,并在内部重新组织此哈希表,以便更有效地适应和访问其条目。 |
Remove(Object) |
从此哈希表中删除键 (及其相应的值) 。 |
Remove(Object, Object) |
从此哈希表中删除键 (及其相应的值) 。 |
Replace(Object, Object) |
此类实现哈希表,该哈希表将键映射到值。 |
Replace(Object, Object, Object) |
此类实现哈希表,该哈希表将键映射到值。 |
ReplaceAll(IBiFunction) |
此类实现哈希表,该哈希表将键映射到值。 |
SetHandle(IntPtr, JniHandleOwnership) |
设置 Handle 属性。 (继承自 Object) |
Size() |
返回此哈希表中的键数。 |
ToArray<T>() |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
ToString() |
返回对象的字符串表示形式。 (继承自 Object) |
UnregisterFromRuntime() |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
Values() |
返回 |
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() |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
IJavaPeerable.Finalized() |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
IJavaPeerable.JniManagedPeerState |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
此类实现哈希表,该哈希表将键映射到值。 (继承自 Object) |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
此类实现哈希表,该哈希表将键映射到值。 |
GetJniTypeName(IJavaPeerable) |
此类实现哈希表,该哈希表将键映射到值。 |