IdentityHashMap 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
此類別以雜湊表實作介面, Map 在比較鍵(及值)時使用參考等式取代物件相等。
[Android.Runtime.Register("java/util/IdentityHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class IdentityHashMap : Java.Util.AbstractMap, IDisposable, Java.IO.ISerializable, Java.Lang.ICloneable
[<Android.Runtime.Register("java/util/IdentityHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type IdentityHashMap = class
inherit AbstractMap
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ICloneable
interface IMap
- 繼承
- 屬性
- 實作
備註
此類別以雜湊表實作介面, Map 在比較鍵(及值)時使用參考等式取代物件相等。 換句話說,在 中 IdentityHashMap,兩個鍵 k1 和 k2 被視為相等當且僅當 (k1==k2)。 (在正常 Map 實作(如 HashMap)中,兩個鍵 k1 和 k2 被視為相等當且僅當 (k1==null ? k2==null : k1.equals(k2))。)
<b>這個類別不是Map通用實作! 雖然此類別實作了介面, Map 但故意違反 Map's 一般契約,該契約要求在比較物件時必須使用此 equals 方法。 此類別僅設計用於需要引用等量語意的罕見情況。</b>
此映射的視圖集合也具有參考相等語意。 詳情請參閱 keySet() keySet、 values() values及 entrySet() entrySet 方法。
此類別的典型用途是 保持拓撲的物件圖轉換,例如序列化或深度複製。 為了執行此轉換,程式必須維護一個「節點表」,以追蹤所有已處理的物件參考。 節點表不得將不同物件相等,即使它們恰巧相等。 此類別的另一個典型用途是維護 代理物件。 例如,除錯設施可能希望為被除錯程式中的每個物件維護一個代理物件。
此類別提供所有可選的映射操作,並允許值null與鍵值。null 此類別不保證地圖的順序;特別是,它並不保證該階數會隨時間保持不變。
此類別為基本運算get ( 和 put)提供常數時間效能,前提是系統身份雜湊函數(System#identityHashCode(Object))能正確分散元素於桶間。
此類別有一個調校參數(影響效能但語意不變): 期望最大大小。 此參數是該映射預期能包含的最大鍵值映射數量。 內部用此參數決定最初組成雜湊表的桶數。 期望最大大小與桶數之間的精確關係尚未明確說明。
如果映射大小(鍵值映射數量)足夠超過預期的最大大小,桶數就會增加。 增加桶數(「重排」)可能相當昂貴,因此建立期望最大大小足夠大的恆等雜湊映射是值得的。 另一方面,對集合檢視的迭代需要與雜湊表中桶數成正比的時間,因此如果你特別在意迭代效能或記憶體使用,最好不要將預期最大大小設得太高。
<強>請注意,此實作並非同步。</強> 如果多個執行緒同時存取同一雜湊映射,且至少有一個執行緒在結構上修改了映射, 則必須 在外部同步。 (結構修改是指任何新增或刪除一個或多個映射的操作;僅僅改變實例已包含的鍵值,並不構成結構性修改。)這通常是透過在自然封裝地圖的物件上同步來達成。
若不存在此類物件,則應使用該 Collections#synchronizedMap Collections.synchronizedMap 方法「包裹」映射。 這最好在建立時進行,以避免不同步地存取地圖:
Map m = Collections.synchronizedMap(new IdentityHashMap(...));
所有本類別「集合檢視方法」所回傳的集合中,方法回傳 iterator 的迭代器是 失敗快速的:若在迭代器建立後的任何時間對映射進行結構性修改,除非透過迭代器自身 remove 的方法,迭代器會拋出一個 ConcurrentModificationException。 因此,面對並行修改時,迭代器能迅速且乾淨地失敗,而非冒著未來某個未知時間出現任意且非確定性行為的風險。
請注意,迭代器的失效快速行為無法保證,因為一般而言,在存在非同步的並行修改時,無法做出任何硬性保證。 失效快速迭代器則是以盡力而為的方式投擲 ConcurrentModificationException 。 因此,撰寫依賴此例外來判斷正確性的程式是錯誤的: 快速失敗的迭代器應僅用於偵測錯誤。
此類別是 Java 集合框架的成員。
在 1.4 版本加入。
的 java.util.IdentityHashMapJava 檔。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| IdentityHashMap() |
構建一個新的空恆等雜湊映射,預設期望最大大小為 21。 |
| IdentityHashMap(IDictionary) |
構建一個新的恆等雜湊映射,包含指定映射中的鍵值映射。 |
| IdentityHashMap(Int32) |
構造一個新的、空的映射,並具有指定的預期最大大小。 |
| IdentityHashMap(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
屬性
| 名稱 | 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 |
|---|---|
| Clear() |
待補充 (繼承來源 AbstractMap) |
| Clone() |
回傳此身份雜湊映射的淺版本:鍵與值本身未被複製。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
此類別以雜湊表實作介面, |
| ContainsKey(Object) |
待補充 (繼承來源 AbstractMap) |
| ContainsValue(Object) |
待補充 (繼承來源 AbstractMap) |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
此類別以雜湊表實作介面, |
| EntrySet() |
回傳 |
| Equals(Object) |
此類別以雜湊表實作介面, |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| ForEach(IBiConsumer) |
此類別以雜湊表實作介面, |
| Get(Object) |
待補充 (繼承來源 AbstractMap) |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| JavaFinalize() |
已淘汰.
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| KeySet() |
待補充 (繼承來源 AbstractMap) |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| Put(Object, Object) |
待補充 (繼承來源 AbstractMap) |
| PutAll(IDictionary) |
待補充 (繼承來源 AbstractMap) |
| Remove(Object, Object) |
此類別以雜湊表實作介面, |
| Remove(Object) |
待補充 (繼承來源 AbstractMap) |
| Replace(Object, Object, Object) |
待補充 |
| ReplaceAll(IBiFunction) |
此類別以雜湊表實作介面, |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
此類別以雜湊表實作介面, |
| Size() |
待補充 (繼承來源 AbstractMap) |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| Values() |
待補充 (繼承來源 AbstractMap) |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | 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) |
試著強制 |