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
快速反覆運算器。 因此,撰寫相依于此例外狀況的程式是否正確性是錯誤的: 反覆運算器的失敗快速行為應該只用來偵測錯誤。
這個類別是 JAVA Collections Framework的成員。
已在 1.2 中新增。
此頁面的部分是根據所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。
建構函式
HashMap() |
使用預設初始容量 (16) 和預設載入因數 (0 建構空 |
HashMap(IDictionary) |
使用與指定 |
HashMap(Int32) |
使用指定的初始容量和預設負載因數建構空 |
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) |
介面的雜湊表實作 |