IMap 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
物件,會將索引鍵對應至值。
[Android.Runtime.Register("java/util/Map", "", "Java.Util.IMapInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public interface IMap : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/Map", "", "Java.Util.IMapInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type IMap = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 衍生
- 屬性
- 實作
備註
物件,會將索引鍵對應至值。 對應不能包含重複的索引鍵;每個索引鍵最多可以對應至一個值。
這個介面會取代 Dictionary
類別,這是一個完全抽象的類別,而不是介面。
介面 Map
提供三個 集合檢視,可讓地圖的內容檢視為一組索引鍵、值集合,或一組索引鍵/值對應。 地圖 的順序 會定義為地圖集合檢視上反覆運算器傳回其元素的順序。 某些對應實作,例如 TreeMap
類別,會根據其順序進行特定保證;其他則如 類別一樣 HashMap
,則不會。
注意:如果使用可變動的物件做為地圖索引鍵,則必須特別小心。 如果物件的值變更的方式會影響 equals
比較,而物件是地圖中的索引鍵,則不會指定地圖的行為。 這種禁止的特殊案例是,地圖無法將其本身包含為索引鍵。 雖然地圖可以包含本身做為值,但建議您特別小心: equals
和 hashCode
方法已不再定義于這類地圖上。
所有一般用途對應實作類別都應該提供兩個「標準」建構函式:void (沒有任何引數) 建構函式,其會建立類型為單一引數 Map
的建構函式,其會建立具有相同索引鍵/值對應與其引數相同的新對應。 實際上,後者建構函式可讓使用者複製任何對應,產生所需類別的對等對應。 無法強制執行此建議 (,因為介面不能包含建構函式) ,但 JDK 中的所有一般用途對應實作都符合規範。
這個介面中包含的「破壞性」方法,也就是修改其操作對應的方法,如果這個對應不支援作業,則會指定擲回 UnsupportedOperationException
。 如果是這種情況,這些方法可能不需要,但如果叫用對地圖沒有任何作用,則擲 UnsupportedOperationException
回 。 例如,在 #putAll(Map)
不可修改的對應上叫用 方法,但並非必要,如果對應為「迭加」的對應是空的,則會擲回例外狀況。
某些對應實作對它們可能包含的索引鍵和值有限制。 例如,某些實作會禁止 Null 索引鍵和值,有些則有其索引鍵類型的限制。 嘗試插入不符合資格的索引鍵或值會擲回未核取的例外狀況,通常是 NullPointerException
或 ClassCastException
。 嘗試查詢不符合資格的索引鍵或值是否存在可能會擲回例外狀況,或可能只傳回 false;有些實作會展示先前的行為,有些則會展示後者。 更普遍地,嘗試在不符合資格的索引鍵或值上嘗試作業,其完成不會在對應中插入不符合資格的專案,可能會擲回例外狀況,否則可能會在實作的選項中成功。 這類例外狀況會在此介面的規格中標示為「選擇性」。
集合架構介面中的許多方法都是以 方法為基礎 Object#equals(Object) equals
來定義。 例如,方法的 #containsKey(Object) containsKey(Object key)
規格指出:「只有在此對應包含索引鍵 k
的對應時,才會傳回 ,如此才能傳 (key==null ? k==null : key.equals(k))
回 true
。」 此規格 不應該 被修改,以表示 Map.containsKey
叫用非 Null 引數 key
會導致 key.equals(k)
針對任何索引鍵 k
叫用 。 實作可以自由實作優化 equals
,例如,藉由先比較兩個索引鍵的雜湊碼,藉此避免叫用。 (規格 Object#hashCode()
保證具有不相等雜湊碼的兩個物件不相等。) 較通常,各種 Collections Framework 介面的實作可以自由利用實作者認為適當的基礎 Object
方法指定行為。
某些執行遞迴周遊地圖的對應作業可能會失敗,但對應直接或間接包含本身的自我引用實例例外。 clone()
這包括 、 equals()
hashCode()
和 toString()
方法。 實作可以選擇性地處理自我參考案例,不過大部分的實作都不會這麼做。
<h2 > 「unmodifiable」 > Unmodifiable Maps < /h2>
Map#of() Map.of
、 Map#ofEntries(Map.Entry...) Map.ofEntries
和 Map#copyOf Map.copyOf
靜態處理站方法提供方便的方式,以建立不可修改的對應。 Map
這些方法所建立的實例具有下列特性:
<ul >< li > 它們是 <> i unmodifiable < /i > 。 無法新增、移除或更新索引鍵和值。 呼叫 Map 上的任何 Mutator 方法一律 UnsupportedOperationException
會導致擲回。 不過,如果包含的索引鍵或值本身是可變動的,這可能會導致 Map 的行為不一致,或其內容似乎變更。 <li > 它們不允許 null
索引鍵和值。 嘗試使用 null
索引鍵或值建立它們會導致 NullPointerException
。 <li > 如果所有索引鍵和值皆可序列化,則為可序列化。 <li > 它們會在建立時拒絕重複的金鑰。 傳遞至靜態 Factory 方法的重複索引鍵會導致 IllegalArgumentException
。 <li > 未指定對應的反復專案順序,而且可能會變更。 <li > 它們是以值為基礎的。 程式設計人員應該將 #equals (物件) 相等的實例視為可交換,而且不應該將它們用於同步處理,或可能發生無法預期的行為。 例如,在未來的版本中,同步處理可能會失敗。 呼叫端不應假設傳回實例的身分識別。 處理站是免費的,可以建立新的實例或重複使用現有的實例。 <li > 它們會依 [序列化表單 ] 頁面上的指定來序列化。 </ul>
這個介面是 JAVA Collections Framework的成員。
已在 1.2 中新增。
此頁面的部分是根據所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。
屬性
Handle |
取得基礎 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
IsEmpty |
傳回這個對應是否空白。 |
JniIdentityHashCode |
傳回包裝實例的 |
JniManagedPeerState |
受控對等的狀態。 (繼承來源 IJavaPeerable) |
JniPeerMembers |
成員存取和調用支援。 (繼承來源 IJavaPeerable) |
PeerReference |
傳 JniObjectReference 回已包裝 JAVA 物件實例的 。 (繼承來源 IJavaPeerable) |
方法
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
物件,會將索引鍵對應至值。 |
GetJniTypeName(IJavaPeerable) |
物件,會將索引鍵對應至值。 |