語言

IMap 介面

定義

一個將按鍵映射到數值的物件。

[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 版本中加入。

的 java.util.MapJava 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

屬性

名稱 Description
Handle

取得底層 Android 物件的 JNI 值。

(繼承來源 IJavaObject)
IsEmpty

回傳此映射是否為空。

JniIdentityHashCode

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniObjectReferenceControlBlock

一個將按鍵映射到數值的物件。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)

方法

名稱 Description
Clear()

移除此映射中的所有映射(可選操作)。

Compute(Object, IBiFunction)

嘗試計算指定鍵及其目前映射值的映射,或 null 在沒有當前映射時(可選操作)。

ComputeIfAbsent(Object, IFunction)

若指定的鍵尚未與某值相關聯(或映射至 null),則嘗試使用該映射函數計算其值,並輸入該映射,除非 null (可選操作)。

ComputeIfPresent(Object, IBiFunction)

若指定鍵值存在且非空值,則嘗試根據該鍵及其當前映射值計算新的映射(可選操作)。

ContainsKey(Object)

若此映射包含指定鍵的映射,則回傳 true 。

ContainsValue(Object)

若此映射將一個或多個鍵對應到指定值,則回傳 true 。

CopyOf(IDictionary)

回傳一個不可修改的映射,包含該映射的元素。

Disposed()

當實例被處理後才被召喚。

(繼承來源 IJavaPeerable)
DisposeUnlessReferenced()

如果沒有未解決的參考資料,則 Dispose()呼叫;否則,則不做任何事。

(繼承來源 IJavaPeerable)
Entry(Object, Object)

回傳包含給定鍵與值的不可變值 Entry 。

EntrySet()

回傳 Set 此地圖中所包含映射的視圖。

Equals(Object)

將指定物件與此映射比較以求相等。

Finalized()

當實例完成後才會被通知。

(繼承來源 IJavaPeerable)
ForEach(IBiConsumer)

對該映射中的每個項目執行指定動作,直到所有項目都處理完畢或該動作拋出例外。

Get(Object)

回傳指定金鑰所映射的值,或 null 若該映射不包含該金鑰的映射,則回傳。

GetHashCode()

回傳此映射的雜湊碼值。

GetOrDefault(Object, Object)

回傳指定金鑰所映射的值,或 defaultValue 若該映射不包含該金鑰的映射,則回傳。

KeySet()

回傳 Set 此映射中所含金鑰的視圖。

Merge(Object, Object, IBiFunction)

如果指定的鍵尚未與某值相關聯或與空值相關聯,則會將其與給定的非空值關聯(可選操作)。

Of()

回傳一個包含零映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

回傳一個包含十個映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

回傳一個包含九個映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

回傳一個包含八個映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

回傳一個包含七個映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

回傳一個包含六個映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object, Object, Object)

回傳一個包含五個映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object, Object, Object)

回傳一個包含四個映射的不可修改映射。

Of(Object, Object, Object, Object, Object, Object)

回傳一個包含三個映射的不可修改映射。

Of(Object, Object, Object, Object)

回傳一個包含兩個映射的不可修改映射。

Of(Object, Object)

回傳一個包含單一映射的不可修改映射。

OfEntries(IMapEntry[])

回傳一個不可變的映射,包含從給定條目中提取的鍵與值。

Put(Object, Object)

將指定值與此映射中的指定鍵鍵關聯(可選操作)。

PutAll(IDictionary)

將指定映射中的所有映射複製到該映射(可選操作)。

PutIfAbsent(Object, Object)

如果指定的鍵尚未與某值相關聯(或映射到 null),則將其與該值關聯並回傳 null,否則 返回當前值(可選操作)。

Remove(Object, Object)

只有當指定鍵目前已映射到指定值時,才會移除該欄位(可選操作)。

Remove(Object)

若該映射存在,則移除該映射(可選操作)。

Replace(Object, Object, Object)

只有當指定鍵目前映射到指定值時,才會替換該指定鍵的條目(可選操作)。

Replace(Object, Object)

只有當指定鍵目前映射到某個值時,才會替換該金鑰的條目(可選操作)。

ReplaceAll(IBiFunction)

將每個項目的值替換為呼叫該該項目的結果,直到所有項目都處理完畢或該函式拋出例外(可選操作)。

SetJniIdentityHashCode(Int32)

將回傳的值設為 JniIdentityHashCode。

(繼承來源 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

一個將按鍵映射到數值的物件。

(繼承來源 IJavaPeerable)
SetPeerReference(JniObjectReference)

將回傳的值設為 PeerReference。

(繼承來源 IJavaPeerable)
Size()

回傳此映射中鍵值映射的數量。

UnregisterFromRuntime()

取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。

(繼承來源 IJavaPeerable)
Values()

回傳 Collection 此映射中所含值的視圖。

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

一個將按鍵映射到數值的物件。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於