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.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於 ,但不同步且允許零點。)此類別不保證地圖的順序;特別是,它並不保證該階數會隨時間保持不變。
此實作為基本運算getput( 和 )提供恆定時間效能,前提是雜湊函數能妥善分配元素於桶間。 對集合檢視的迭代時間與實例的「容量」( HashMap 桶數)加上大小(鍵值映射數)成正比。 因此,若迭代效能重要,極不應該將初始容量設定過高(或負載因子過低)。
一個 HashMap 實例有兩個參數會影響其效能: 初始容量 與 負載因子。
容量是雜湊表中桶的數量,初始容量則是雜湊表建立時的容量。
負載因子是衡量雜湊表容量自動增加前被允許填滿的程度。 當雜湊表中的條目數超過負載因子與當前容量的乘積時,雜湊表會被 重雜湊 (即重建內部資料結構),使雜湊表的桶數約為兩倍。
一般來說,預設的負載因子(0.75)在時間與空間成本之間提供了良好的平衡。 較高的值會減少空間開銷,但增加查找成本(反映在類別的大多數操作 HashMap 中,包括 get 和 put)。 設定初始容量時應考慮地圖中預期的條目數及其負載因子,以減少重排運算次數。 若初始容量超過最大條目數除以負載因子,則不會發生任何重排運算。
若多個映射要儲存在一個 HashMap 實例中,建立足夠大容量的實例,能讓映射比讓它在需要時自動重排以擴充資料表更有效率。 請注意,使用多個相同 hashCode() 金鑰會肯定會拖慢雜湊表的效能。 為了減輕影響,當鍵數為 Comparable時,此類別可能會使用鍵之間的比較順序來幫助打破平手。
<強>請注意,此實作並非同步。</強> 如果多個執行緒同時存取雜湊映射,且至少有一個執行緒結構性修改了映射, 則必須 在外部同步。 (結構修改是指任何新增或刪除一個或多個映射的操作;僅僅改變實例已包含的鍵值,並不構成結構性修改。)這通常是透過在自然封裝地圖的物件上同步來達成。
若不存在此類物件,則應使用該 Collections#synchronizedMap Collections.synchronizedMap 方法「包裹」映射。 這最好在建立時進行,以避免不同步地存取地圖:
Map m = Collections.synchronizedMap(new HashMap(...));
此類別所有「集合檢視方法」回傳的迭代器皆為 失敗快速:若在迭代器建立後的任何時間對映射進行結構修改,且非透過迭代器自身 remove 的方法,迭代器將拋出 ConcurrentModificationException。 因此,面對並行修改時,迭代器能迅速且乾淨地失敗,而非冒著未來某個未知時間出現任意且非確定性行為的風險。
請注意,迭代器的失效快速行為無法保證,因為一般而言,在存在非同步的並行修改時,無法做出任何硬性保證。 失效快速迭代器則是以盡力而為的方式投擲 ConcurrentModificationException 。 因此,撰寫依賴此例外來確保正確性的程式是錯誤的: 迭代器的快速失效行為應該只用來偵測錯誤。
此類別是 Java 集合框架的成員。
在 1.2 版本中加入。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
| 名稱 | Description |
|---|---|
| HashMap() |
以預設初始容量(16)和預設負載因子(0)構建空置。 |
| HashMap(IDictionary) |
構造一個與指定 |
| HashMap(Int32, Single) |
構造一個具有指定初始容量與負載因子的空槽 |
| HashMap(Int32) |
構造一個具有指定初始容量且預設負載因子為 0 的空位。 |
| HashMap(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
傳回這個 |
| Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
| IsEmpty |
待補充 (繼承來源 AbstractMap) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
介面的實作是基於雜湊表的。 |
| JniPeerMembers |
介面的實作是基於雜湊表的。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
介面的實作是基於雜湊表的。 |
| IJavaPeerable.Finalized() |
介面的實作是基於雜湊表的。 |
| IJavaPeerable.JniObjectReferenceControlBlock |
介面的實作是基於雜湊表的。 |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
介面的實作是基於雜湊表的。 |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
介面的實作是基於雜湊表的。 |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
介面的實作是基於雜湊表的。 |
| IJavaPeerable.UnregisterFromRuntime() |
介面的實作是基於雜湊表的。 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
| JavaCast<TResult>(IJavaObject) |
介面的實作是基於雜湊表的。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |