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
- 衍生
- 屬性
- 實作
備註
一個將按鍵映射到數值的物件。 地圖不能包含重複的鍵;每個鍵最多只能對應一個值。
這個介面取代了 class 這個 Dictionary 完全抽象的類別,而非介面。
介面 Map 提供三種 集合檢視,允許將映射內容視為一組鍵、值集合或鍵值對應集合。 映射的 順序 定義為迭代器在該映射集合視圖中回傳元素的順序。 有些地圖實作,如職業, TreeMap 會對遭遇順序有明確保證;有些則 HashMap 不保證。 具有明確遭遇順序的地圖通常是介面的 SequencedMap 子類型。
注意:若使用可變物件作為地圖鍵,必須格外謹慎。 如果物件的值以影響 equals 比較的方式改變,而物件在該物件仍是地圖中的鍵時,則不指定該映射的行為。 此禁令的一個特殊情況是,映射不允許包含自己作為鍵。 雖然允許映射包含自身為值,但建議極度謹慎:equalshashCode與方法在此類映射上已不再明確定義。
所有通用映射實作類別應提供兩個「標準」建構子:一個空(無參數)建構器,建立空映射;另一個建構子,其單一參數型別 Map為 ,創建一個與其參數相同的鍵值映射的新映射。 實際上,後者建構子允許使用者複製任意映射,產生所需類別的等價映射。 此建議無法強制執行(因為介面無法包含建構子),但 JDK 中所有通用地圖實作皆符合此要求。
此介面中包含的「破壞性」方法,也就是修改其操作映射的方法,若該映射不支援該操作,則會被指定拋出 UnsupportedOperationException 。 若屬此情況,這些方法可但非必須,拋出 若 UnsupportedOperationException 調用對地圖無影響。 例如, #putAll(Map) 若映射為空,則在不可修改映射上呼叫該方法,但並非必須拋出例外。
有些映射實作對其可包含的鍵和值有限制。 例如,有些實作禁止空鍵與空值,有些則對鍵型設限制。 嘗試插入不合格的鍵或值會拋出未檢查的例外,通常是 NullPointerException 或 ClassCastException。 嘗試查詢不合格的鍵或值可能會拋出例外,或直接回傳 false;有些實作會呈現前者,有些則會呈現後者。 更一般來說,嘗試對不合格的鍵或值進行操作,但其完成後不會插入不合格元素到映射中,可能會拋出例外,或在實作選擇下成功。 此類例外在此介面規範中標示為「可選」。
Collections Framework 的許多介面方法都是以該 Object#equals(Object) equals 方法來定義的。 例如,該方法的規範 #containsKey(Object) containsKey(Object key) 寫道:「回傳 true 當且僅當此映射包含一個鍵的映射 k ,使得 (key==null ? k==null : key.equals(k))。」 此規範 不應 被解釋為使用 Map.containsKey 非空參數 key 時,會對 key.equals(k) 任意鍵 k被調用。 實作中可自由實作優化,避免 equals 調用,例如先比較兩個鍵的雜湊碼。 (規範 Object#hashCode() 保證兩個雜湊碼不相等的物件不可能相等。)更一般來說,各種集合框架介面的實作可自由利用底層 Object 方法的指定行為,視實作者認為適當而定。
某些執行遞迴遍歷映射的映射操作可能會失敗,但對於映射直接或間接包含自身的自參實例例外。 這包括 clone()、 equals()和 hashCode()toString() 方法。 實作可選擇性地處理自參情境,但大多數現行實作並未這麼做。
<h2>「不可修改」不可修改地圖></h2>
Map#of() Map.of、 Map#ofEntries(Map.Entry...) Map.ofEntries和 Map#copyOf Map.copyOf 靜態工廠方法提供了一種方便的方式來建立不可修改的映射。 這些方法所建立的 Map 實例具有以下特性:
<ul><li>他們是<>不可修改/不可<更改>的。 鍵與值無法新增、移除或更新。 在地圖上呼叫任何變異器方法,總是會被 UnsupportedOperationException 拋出。 然而,若所包含的鍵或值本身是可變的,可能會導致映射行為不一致,或其內容看起來有變化。
<李>他們不允許 null 按鍵和值。 嘗試用 null 鍵或值建立它們會得到 NullPointerException。
<li>如果所有鍵和值都能序列化,它們就是可序列化的。
<李>:他們在創建時會拒絕重複的金鑰。 重複的金鑰傳遞到靜態工廠方法會得到 IllegalArgumentException。
<li>映射的迭代順序未明確規定,且可隨時變動。
<李>:它們是以價值為基礎的。 程式設計師應將 #equals(物件)相等的實例視為可互換,不應用於同步,否則可能會產生不可預測的行為。 例如,在未來版本中,同步可能會失敗。 呼叫者不應對回傳實例的身份做出任何假設。 工廠可以自由建立新實例或重用現有實例。
<li>它們依照序 號表單 頁面所指定的序列化。
</ul>
此介面是 Java 集合框架的成員。
在 1.2 版本中加入。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
屬性
| 名稱 | Description |
|---|---|
| Handle |
取得底層 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
| IsEmpty |
回傳此映射是否為空。 |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
一個將按鍵映射到數值的物件。 (繼承來源 IJavaPeerable) |
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
方法
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
| JavaCast<TResult>(IJavaObject) |
一個將按鍵映射到數值的物件。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |