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)。 設定其初始容量時,應該考慮對應中預期的項目數目及其負載因數,以便將重新hash 作業數目降至最低。 如果初始容量大於除以負載因數的最大項目數目,則永遠不會發生重新hash 作業。
如果要將許多對應儲存在實例中 HashMap ,建立具有足夠龐大容量的對應,將可讓對應更有效率地儲存,而不需視需要執行自動重新套用來增加數據表。 請注意,使用許多具有相同索引 hashCode() 鍵是減緩任何哈希表效能的一個確定方式。 為了改善影響,當索引鍵為 Comparable時,這個類別可能會使用索引鍵之間的比較順序來協助中斷系結。
<強>請注意,此實作不會同步處理。</strong> 如果多個線程同時存取哈希對應,而且至少有一個線程在結構上修改對應, 則必須 在外部同步處理。 (結構修改是任何加入或刪除一或多個對應的作業;只要變更與實例已包含之索引鍵相關聯的值就不是結構修改。這通常是藉由在自然封裝地圖的某些對象上進行同步處理來完成。
如果不存在這類物件,則對應應該使用 Collections#synchronizedMap Collections.synchronizedMap 方法「包裝」。 這最好是在建立時完成,以防止意外未同步存取地圖:
Map m = Collections.synchronizedMap(new HashMap(...));
這個類別之所有「集合檢視方法」所傳回的反覆運算器都是 失敗的:如果在建立反覆運算器之後隨時以結構化方式修改對應,則除了透過反覆運算器自己的 remove 方法之外,反覆運算器也會擲回 ConcurrentModificationException。 因此,面對並行修改,反覆運算器會快速且乾淨地失敗,而不是在未來不確定的時間冒著任意、不具決定性的行為的風險。
請注意,Iterator 的失敗快速行為無法保證,一般來說,不可能在未同步處理並行修改的情況下進行任何硬式保證。 快速反覆運算器會盡最大努力擲回 ConcurrentModificationException 。 因此,撰寫依賴此例外狀況的程序正確性是錯誤的: Iterator 的失敗快速行為應該只用來偵測 Bug。
這個類別是 Java Collections Framework 的成員。
已在1.2中新增。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
| HashMap() |
使用預設初始容量 (16) 和預設負載因數 (0) 建構空 |
| HashMap(IDictionary) |
使用與指定 |
| HashMap(Int32) |
使用指定的初始容量與預設負載因數 (0) 建構空 |
| HashMap(Int32, Single) |
使用指定的初始容量與負載因子建構空 |
| HashMap(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
屬性
| Class |
傳回這個 |
| Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
| IsEmpty |
要新增 (繼承來源 AbstractMap) |
| JniIdentityHashCode |
介面的哈希表實作 |
| JniPeerMembers |
介面的哈希表實作 |
| PeerReference |
介面的哈希表實作 |
| ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
| ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
方法
| 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 <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
| Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
| Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</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) |
介面的哈希表實作 |