Share via


IdentityHashMap 類別

定義

這個類別會實作 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.Interop.IJavaPeerable, 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
繼承
IdentityHashMap
屬性
實作

備註

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。 換句話說,在 中,兩個 IdentityHashMap 索引鍵 k1k2 視為相等,只有在 和 時才 (k1==k2) 會視為相等。 (在一般 Map 實作中 (,例如 HashMap) 兩個索引鍵 k1 ,只有在 k2 .) 時 (k1==null ? k2==null : k1.equals(k2)) 才會視為相等

<b > 這個類別 不是 一般用途 Map 實作! 雖然這個類別會實作 Map 介面,但它刻意違反 Map's 一般合約,這會在比較物件時強制使用 equals 方法。 這個類別的設計僅適用于需要參考相等語意的罕見案例。 </B>

這個類別的一般用法是 拓撲保留物件圖形轉換,例如序列化或深層複製。 若要執行這類轉換,程式必須維護「節點資料表」,以追蹤已經處理的所有物件參考。 節點資料表不得等於相異物件,即使它們發生相等。 這個類別的另一個典型用法是維護 Proxy 物件。 例如,偵錯設施可能會想要針對正在偵錯之程式中的每個物件維護 Proxy 物件。

這個類別提供所有選擇性的對應作業,並允許 null 值和 null 索引鍵。 此類別不保證對應的順序;特別是,它不保證順序會隨著時間維持不變。

這個類別提供基本作業 (getput) 的常數時間效能,假設系統身分識別雜湊函式 (System#identityHashCode(Object)) 在貯體之間適當分散元素。

此類別有一個微調參數 (,會影響效能,但不會影響語意) : 預期的大小上限。 此參數是對應預期保留的索引鍵/值對應數目上限。 在內部,此參數是用來判斷一開始組成雜湊表的貯體數目。 未指定預期大小上限和貯體數目之間的精確關聯性。

如果對應的大小 (索引鍵/值對應的數目,) 足以超過預期的最大大小,就會增加貯體數目。 增加貯體數目 (「重新套用」) 可能相當昂貴,因此建立具有足夠大預期大小上限的身分識別雜湊對應會支付費用。 另一方面,在集合檢視上進行反復專案需要與雜湊表中貯體數目成正比的時間,因此,如果您特別擔心反復專案效能或記憶體使用量,則不需設定預期的最大大小。

<強 > 請注意,此實作不會同步處理。 </strong > 如果多個執行緒同時存取識別雜湊對應,而且至少有一個執行緒以結構化方式修改對應, 則必須 在外部同步處理。 (結構修改是新增或刪除一或多個對應的任何作業;只變更與實例已包含之索引鍵相關聯的值不是結構化修改。) 這通常是藉由在自然封裝對應的某些物件上進行同步處理來完成。

如果沒有這類物件存在,則對應應該使用 Collections#synchronizedMap Collections.synchronizedMap 方法「包裝」。 這最好是在建立時完成,以防止意外未同步存取地圖:

Map m = Collections.synchronizedMap(new IdentityHashMap(...));

所有這個類別的「集合檢視方法」所傳回 iterator 之集合的反覆運算器都會 失敗:如果在建立反覆運算器之後,任何時間都會以結構化方式修改對應,但透過反覆運算器自己的 remove 方法除外,反覆運算器會擲 ConcurrentModificationException 回 。 因此,在同時修改時,反覆運算器會快速且簡潔地失敗,而不是在未來不具決定性的任意不具決定性行為風險。

請注意,反覆運算器的失敗快速行為無法保證,一般而言,不可能在未同步處理並行修改的情況下進行任何硬式保證。 快速反覆運算器會以最佳方式擲回 ConcurrentModificationException 。 因此,撰寫相依于此例外狀況的程式是否正確性是錯誤的: 應該只使用快速反覆運算器來偵測錯誤。

這個類別是 JAVA Collections Framework的成員。

已在 1.4 中新增。

java.util.IdentityHashMap JAVA 檔。

此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據中所述的詞彙使用。

建構函式

IdentityHashMap()

建構新的空白識別雜湊對應,其預設預期大小上限為 (21) 。

IdentityHashMap(IDictionary)

建構新的識別雜湊對應,其中包含指定之對應中的索引鍵/值對應。

IdentityHashMap(Int32)

建構具有指定之預期大小上限的新空白對應。

IdentityHashMap(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 標記法時所使用的建構函式;由執行時間呼叫。

屬性

Class

傳回這個 Object 的執行時間類別。

(繼承來源 Object)
Handle

基礎 Android 實例的控制碼。

(繼承來源 Object)
IsEmpty

要新增

(繼承來源 AbstractMap)
JniIdentityHashCode

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
JniPeerMembers

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

PeerReference

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
ThresholdClass

此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式碼使用。

ThresholdType

此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式碼使用。

方法

Clear()

要新增

(繼承來源 AbstractMap)
Clone()

傳回此識別雜湊對應的淺層複本:不會複製索引鍵和值本身。

ContainsKey(Object)

要新增

(繼承來源 AbstractMap)
ContainsValue(Object)

要新增

(繼承來源 AbstractMap)
Dispose()

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
Dispose(Boolean)

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
EntrySet()

Set傳回這個對應中包含的對應檢視。

Equals(Object)

指出其他物件是否「等於」這個物件。

(繼承來源 Object)
ForEach(IBiConsumer)

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

Get(Object)

要新增

(繼承來源 AbstractMap)
GetHashCode()

傳回此物件的雜湊碼值。

(繼承來源 Object)
JavaFinalize()

當垃圾收集判斷物件沒有其他參考時,由物件上的垃圾收集行程呼叫。

(繼承來源 Object)
KeySet()

要新增

(繼承來源 AbstractMap)
Notify()

喚醒正在等候此物件的監視器的單一線程。

(繼承來源 Object)
NotifyAll()

喚醒正在等候此物件監視器的所有線程。

(繼承來源 Object)
Put(Object, Object)

要新增

(繼承來源 AbstractMap)
PutAll(IDictionary)

要新增

(繼承來源 AbstractMap)
Remove(Object)

要新增

(繼承來源 AbstractMap)
ReplaceAll(IBiFunction)

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
Size()

要新增

(繼承來源 AbstractMap)
ToArray<T>()

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
ToString()

傳回物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
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()

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
IJavaPeerable.DisposeUnlessReferenced()

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
IJavaPeerable.Finalized()

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
IJavaPeerable.JniManagedPeerState

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

(繼承來源 Object)

擴充方法

JavaCast<TResult>(IJavaObject)

執行 Android 執行時間檢查的類型轉換。

JavaCast<TResult>(IJavaObject)

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

GetJniTypeName(IJavaPeerable)

這個類別會實作 Map 雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。

適用於