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.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
- 繼承
- 屬性
- 實作
備註
這個類別會實作 Map
雜湊表的介面,在比較索引鍵 (和值時,使用參考相等來取代物件相等) 。 換句話說,在 中,兩個 IdentityHashMap
索引鍵 k1
會 k2
視為相等,只有在 和 時才 (k1==k2)
會視為相等。 (在一般 Map
實作中 (,例如 HashMap
) 兩個索引鍵 k1
,只有在 k2
.) 時 (k1==null ? k2==null : k1.equals(k2))
才會視為相等
<b > 這個類別 不是 一般用途 Map
實作! 雖然這個類別會實作 Map
介面,但它刻意違反 Map's
一般合約,這會在比較物件時強制使用 equals
方法。 這個類別的設計僅適用于需要參考相等語意的罕見案例。 </B>
這個類別的一般用法是 拓撲保留物件圖形轉換,例如序列化或深層複製。 若要執行這類轉換,程式必須維護「節點資料表」,以追蹤已經處理的所有物件參考。 節點資料表不得等於相異物件,即使它們發生相等。 這個類別的另一個典型用法是維護 Proxy 物件。 例如,偵錯設施可能會想要針對正在偵錯之程式中的每個物件維護 Proxy 物件。
這個類別提供所有選擇性的對應作業,並允許 null
值和 null
索引鍵。 此類別不保證對應的順序;特別是,它不保證順序會隨著時間維持不變。
這個類別提供基本作業 (get
和 put
) 的常數時間效能,假設系統身分識別雜湊函式 (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 |
傳回這個 |
Handle |
基礎 Android 實例的控制碼。 (繼承來源 Object) |
IsEmpty |
要新增 (繼承來源 AbstractMap) |
JniIdentityHashCode |
這個類別會實作 |
JniPeerMembers |
這個類別會實作 |
PeerReference |
這個類別會實作 |
ThresholdClass |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式碼使用。 |
ThresholdType |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式碼使用。 |
方法
Clear() |
要新增 (繼承來源 AbstractMap) |
Clone() |
傳回此識別雜湊對應的淺層複本:不會複製索引鍵和值本身。 |
ContainsKey(Object) |
要新增 (繼承來源 AbstractMap) |
ContainsValue(Object) |
要新增 (繼承來源 AbstractMap) |
Dispose() |
這個類別會實作 |
Dispose(Boolean) |
這個類別會實作 |
EntrySet() |
|
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) |
要新增 (繼承來源 AbstractMap) |
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) |
這個類別會實作 |