共用方式為


ConcurrentHashMap 類別

定義

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

[Android.Runtime.Register("java/util/concurrent/ConcurrentHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class ConcurrentHashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Util.Concurrent.IConcurrentMap
[<Android.Runtime.Register("java/util/concurrent/ConcurrentHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type ConcurrentHashMap = class
    inherit AbstractMap
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface IConcurrentMap
    interface IMap
繼承
ConcurrentHashMap
屬性
實作

備註

哈希表支援擷取的完整並行,以及更新的高預期並行存取。 這個類別遵守 與 java.util.Hashtable相同的功能規格,並包含對應至 每個方法的方法 Hashtable版本。 不過,即使所有作業都是安全線程,但擷取作業<>不會</em>> 需要鎖定,而且<>沒有任何<支援鎖定整個數據表,以防止所有存取。 此類別與 Hashtable 依賴線程安全性,但不依賴其同步處理詳細數據的程式中完全互通。

擷取作業(包括 get)通常不會封鎖,因此可能會與更新作業重疊(包括 putremove)。 擷取會反映最近 <em>completed</em> 更新作業在啟動時所持有的結果。 (更正式的是,指定索引鍵的更新作業會與 <報告更新值之任何 (非 Null) 擷取的 em>發生前</em> 關聯性。 針對 和 clearputAll匯總作業,並行擷取可能會反映只插入或移除某些專案。 同樣地,Iterators、Spliterators 和 Enumerations 會傳回元素,以反映哈希表在某個時間點或自建立反覆運算器/列舉之後的狀態。 它們不會<></em> 擲回 java.util.ConcurrentModificationException ConcurrentModificationException。 不過,反覆運算器是設計成一次只能由一個線程使用。 請記住,匯總狀態方法的結果,包括 sizeisEmptycontainsValue 通常只有在對應未在其他線程中同時進行更新時才有用。 否則,這些方法的結果會反映暫時性狀態,這些狀態可能足以用於監視或估計目的,但不適用於程式控制。

當發生太多衝突時,數據表會動態展開(也就是具有相異哈希碼但落入數據表大小的相同位置模數的索引鍵),且每個對應大約維護兩個間隔的預期平均效果(對應至重設大小的0.75負載因數臨界值)。 新增和移除對應時,此平均值可能會有很多差異,但整體而言,這會維護哈希表通常接受的時間/空間取捨。 不過,調整這個或任何其他哈希表的大小可能是相對緩慢的作業。 可能的話,最好提供大小估計做為選擇性 initialCapacity 建構函式自變數。 額外的選擇性 loadFactor 建構函式自變數提供進一步的自定義初始數據表容量的方法,方法是指定要用於計算要配置給指定項目數目的空間量。 此外,為了與這個類別的舊版相容,建構函式可以選擇性地指定預期 concurrencyLevel 做為內部重設大小的額外提示。 請注意,使用許多索引鍵與 完全相同 hashCode() ,是減緩任何哈希表效能的一個肯定方式。 為了改善影響,當索引鍵為 Comparable時,這個類別可能會使用索引鍵之間的比較順序來協助中斷系結。

Set可能會建立 ConcurrentHashMap 的投影(使用 #newKeySet()#newKeySet(int)),或檢視 (#keySet(Object)只有在只有感興趣的索引鍵時使用,而對應的值可能是暫時未使用,或全部都採用相同的對應值。

ConcurrentHashMap 可做為可調整的頻率對應(直方圖或多重集形式),方法是使用 java.util.concurrent.atomic.LongAdder 值並透過 #computeIfAbsent computeIfAbsent初始化。 例如,若要將計數新增至 ConcurrentHashMap<String,LongAdder> freqs,您可以使用 freqs.computeIfAbsent(key, k -> new LongAdder()).increment();

這個類別及其檢視和反覆運算器會實作 和 Iterator 介面的所有 <em> 選擇性</em> 方法Map

Hashtable 不同,HashMap這個類別不會<<>/em> 允許null當做索引鍵或值使用。

ConcurrentHashMaps 支援一組循序和平行大量作業,與大多數 Stream 方法不同,設計成安全且通常很合理地套用到其他線程同時更新的對應;例如,計算共用登錄中值的快照集摘要時。 有三種作業類型,各有四種形式,接受具有索引鍵、值、專案和(索引鍵、值)組的函式做為自變數和/或傳回值。 因為 ConcurrentHashMap 的元素不會以任何特定方式排序,而且可以在不同的平行執行中以不同的順序處理,因此提供函式的正確性不應取決於任何排序,或可能暫時變更計算時可能暫時變更的任何物件或值;和 除了 forEach 動作以外,最好是無副作用。 物件上的 Map.Entry 大量作業不支援 方法 setValue

<ul><li>forEach:在每個元素上執行指定的動作。 變數窗體會在執行動作之前,在每個元素上套用指定的轉換。

<li>search:傳回在每個元素上套用指定函式的第一個可用非 Null 結果;在找到結果時略過進一步搜尋。

<li>reduce:累積每個元素。 提供的縮減函式不能依賴排序(更正式,它應該是關聯性和通勤性)。 有五個變體:

<ul>

<李>平原縮減。 (由於沒有對應的傳回型別,因此沒有這個方法的型別(索引鍵、值)函式自變數。

<li>對應縮減會累積套用至每個元素之指定函式的結果。

<li>會使用指定的基值,縮減為純量雙精度浮點數、longs 和 int。

</ul></ul>

這些大量作業接受自 parallelismThreshold 變數。 如果目前的地圖大小估計小於指定的臨界值,則方法會循序進行。 使用的值 Long.MAX_VALUE 會隱藏所有平行處理原則。 藉由將數據分割成足夠的子工作,以充分利用ForkJoinPool#commonPool()用於所有平行計算的 ,以產生最大平行處理原則的值1。 一般而言,您一開始會選擇其中一個極端值,然後測量使用介於值之間的效能,以取捨額外負荷與輸送量。

大量作業的並行屬性會遵循 ConcurrentHashMap 的並行屬性:從 get(key) 傳回的任何非 Null 結果,以及相關的存取方法都會與相關聯的插入或更新產生前置關聯性。 任何大量作業的結果都會反映這些每個元素關聯性的組成(但不一定是整體對應不可部分完成的,除非以某種方式已知為靜止)。 相反地,由於對應中的索引鍵和值絕不為 Null,Null 會做為目前缺少任何結果的可靠不可部分完成指標。 為了維護這個屬性,Null 可作為所有非純量縮減作業的隱含基礎。 針對 double、long 和 int 版本,基礎應該是結合任何其他值時傳回其他值(更正式的,應該是縮減的識別元素)。 最常見的縮減具有這些屬性;例如,使用基礎 0 計算總和,或以基礎MAX_VALUE計算最小值。

提供做為自變數的搜尋和轉換函式應該同樣會傳回 null,以指出缺少任何結果(在此情況下不會使用它)。 在對應的縮減案例中,如果不應該合併元素,這也可讓轉換做為篩選條件、傳回 Null(或在基本特製化的情況下傳回識別基礎)。 您可以在搜尋或縮減作業中使用它們之前,先自行撰寫此「Null 表示現在沒有任何」規則,以建立複合轉換和篩選。

接受和/或傳回 Entry 自變數的方法會維護索引鍵/值關聯。 例如,尋找最大值的索引鍵時,它們可能很有用。 請注意,可以使用 提供 new AbstractMap.SimpleEntry(k,v)「plain」 Entry 自變數。

大量作業可能會突然完成,並擲回在所提供函式的應用程式中遇到的例外狀況。 請記住,處理這類例外狀況時,其他同時執行的函式也可能擲回例外狀況,或如果在未發生第一個例外狀況時這麼做。

相較於循序形式,平行處理的速度是常見的,但不保證。 如果平行處理計算的基礎工作比計算本身更昂貴,涉及小型對應上簡短函式的平行作業,執行速度可能會比循序形式慢。 同樣地,如果所有處理器都忙於執行不相關的工作,平行處理可能不會產生太多實際平行處理原則。

所有工作方法的所有自變數都必須是非 Null。

這個類別是 Java Collections Framework 的成員

已在1.5中新增。

java.util.concurrent.ConcurrentHashMapJava 檔。

此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。

建構函式

ConcurrentHashMap()

使用預設的初始數據表大小 (16) 建立新的空白對應。

ConcurrentHashMap(IDictionary)

使用與指定地圖相同的對應,建立新的地圖。

ConcurrentHashMap(Int32)

使用初始數據表大小來建立新的空白對應,以容納指定的元素數目,而不需要動態重設大小。

ConcurrentHashMap(Int32, Single)

根據指定的項目數 () 和初始數據表密度 ,initialCapacity建立具有初始數據表大小的新空白對應。loadFactor

ConcurrentHashMap(Int32, Single, Int32)

根據指定的項目數目()、初始數據表密度(initialCapacityloadFactor),以及同時更新線程concurrencyLevel的數目,建立具有初始數據表大小的新空白對應。

ConcurrentHashMap(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。

屬性

Class

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

(繼承來源 Object)
Handle

基礎Android實例的句柄。

(繼承來源 Object)
IsEmpty

要新增

(繼承來源 AbstractMap)
JniIdentityHashCode

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

(繼承來源 Object)
JniPeerMembers

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

PeerReference

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

(繼承來源 Object)
ThresholdClass

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

ThresholdType

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

方法

Clear()

要新增

(繼承來源 AbstractMap)
Clone()

建立並傳回這個 對象的複本。

(繼承來源 Object)
Compute(Object, IBiFunction)

嘗試計算指定索引鍵的對應及其目前的對應值(如果沒有 null 目前的對應)。

ComputeIfAbsent(Object, IFunction)

如果指定的索引鍵尚未與值相關聯,請嘗試使用指定的對應函式計算其值,並輸入此對應,除非 null

ComputeIfPresent(Object, IBiFunction)

如果指定的索引鍵值存在,則嘗試計算指定索引鍵及其目前對應值的新對應。

Contains(Object)

測試某些索引鍵是否對應至此數據表中的指定值。

ContainsKey(Object)

要新增

(繼承來源 AbstractMap)
ContainsValue(Object)

要新增

(繼承來源 AbstractMap)
Dispose()

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

(繼承來源 Object)
Dispose(Boolean)

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

(繼承來源 Object)
Elements()

傳回這個數據表中值的列舉。

EntrySet()

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

Equals(Object)

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

(繼承來源 Object)
ForEach(IBiConsumer)

針對每個 (索引鍵、值) 執行指定的動作。

ForEach(Int64, IBiConsumer)

針對每個 (索引鍵、值) 執行指定的動作。

ForEach(Int64, IBiFunction, IConsumer)

針對每個 (索引鍵、值) 的每個非 Null 轉換,執行指定的動作。

ForEachEntry(Int64, IConsumer)

針對每個項目執行指定的動作。

ForEachEntry(Int64, IFunction, IConsumer)

針對每個專案的每個非 Null 轉換執行指定的動作。

ForEachKey(Int64, IConsumer)

針對每個索引鍵執行指定的動作。

ForEachKey(Int64, IFunction, IConsumer)

針對每個索引鍵的每個非 Null 轉換執行指定的動作。

ForEachValue(Int64, IConsumer)

針對每個值執行指定的動作。

ForEachValue(Int64, IFunction, IConsumer)

針對每個值的每個非 Null 轉換執行指定的動作。

Get(Object)

要新增

(繼承來源 AbstractMap)
GetHashCode()

傳回此物件的雜湊碼值。

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

傳回所指定索引鍵所對應的值,如果這個對應未包含索引鍵的對應,則傳回指定的預設值。

JavaFinalize()

當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。

(繼承來源 Object)
Keys()

傳回此數據表中索引鍵的列舉。

KeySet()

要新增

(繼承來源 AbstractMap)
MappingCount()

傳回對應的數目。

Merge(Object, Object, IBiFunction)

如果指定的索引鍵尚未與 (非 Null) 值相關聯,請將它與指定的值產生關聯。

Notify()

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

(繼承來源 Object)
NotifyAll()

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

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

要新增

(繼承來源 AbstractMap)
PutAll(IDictionary)

要新增

(繼承來源 AbstractMap)
PutIfAbsent(Object, Object)

要新增

Reduce(Int64, IBiFunction, IBiFunction)

傳回使用指定歸納器結合值之所有(索引鍵、值)組的指定轉換結果,如果沒有,則傳回 null。

ReduceEntries(Int64, IBiFunction)

傳回使用指定歸納器來結合值的所有項目的結果,如果沒有,則傳回 null。

ReduceEntries(Int64, IFunction, IBiFunction)

傳回使用指定歸納器結合值之所有專案的指定轉換結果,如果沒有,則傳回 null。

ReduceEntriesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

傳回使用指定歸納器來結合值之所有專案之指定轉換的結果,以及指定的基礎做為識別值。

ReduceEntriesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

傳回使用指定歸納器來結合值之所有專案之指定轉換的結果,以及指定的基礎做為識別值。

ReduceEntriesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

傳回使用指定歸納器來結合值之所有專案之指定轉換的結果,以及指定的基礎做為識別值。

ReduceKeys(Int64, IBiFunction)

傳回使用指定歸納器來結合值的所有索引鍵,如果沒有,則傳回 null 的結果。

ReduceKeys(Int64, IFunction, IBiFunction)

傳回使用指定歸納器結合值之所有索引鍵的指定轉換結果,如果沒有,則傳回 null。

ReduceKeysToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

傳回使用指定歸納器合併值,以及指定基礎做為識別值之所有索引鍵累積指定轉換的結果。

ReduceKeysToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

傳回使用指定歸納器合併值,以及指定基礎做為識別值之所有索引鍵累積指定轉換的結果。

ReduceKeysToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

傳回使用指定歸納器合併值,以及指定基礎做為識別值之所有索引鍵累積指定轉換的結果。

ReduceToDouble(Int64, IToDoubleBiFunction, Double, IDoubleBinaryOperator)

傳回使用指定歸納器結合值,以及指定基礎做為識別值之所有(索引鍵、值)組的累積指定轉換結果。

ReduceToInt(Int64, IToIntBiFunction, Int32, IIntBinaryOperator)

傳回使用指定歸納器結合值,以及指定基礎做為識別值之所有(索引鍵、值)組的累積指定轉換結果。

ReduceToLong(Int64, IToLongBiFunction, Int64, ILongBinaryOperator)

傳回使用指定歸納器結合值,以及指定基礎做為識別值之所有(索引鍵、值)組的累積指定轉換結果。

ReduceValues(Int64, IBiFunction)

傳回使用指定歸納器來合併值的所有值的結果,如果沒有,則傳回 null。

ReduceValues(Int64, IFunction, IBiFunction)

傳回使用指定歸納器結合值之所有值累積指定轉換的結果,如果沒有,則傳回 null。

ReduceValuesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

傳回使用指定歸納器合併值,以及指定基礎做為識別值之所有值累積指定轉換的結果。

ReduceValuesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

傳回使用指定歸納器合併值,以及指定基礎做為識別值之所有值累積指定轉換的結果。

ReduceValuesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

傳回使用指定歸納器合併值,以及指定基礎做為識別值之所有值累積指定轉換的結果。

Remove(Object)

要新增

(繼承來源 AbstractMap)
Remove(Object, Object)

要新增

Replace(Object, Object)

要新增

Replace(Object, Object, Object)

要新增

ReplaceAll(IBiFunction)

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

Search(Int64, IBiFunction)

傳回在每一個 (索引鍵、值) 上套用指定搜尋函式的非 Null 結果,如果沒有,則傳回 null。

SearchEntries(Int64, IFunction)

傳回在每一個專案上套用指定搜尋函式的非 Null 結果,如果沒有,則傳回 null。

SearchKeys(Int64, IFunction)

傳回在每一個索引鍵上套用指定搜尋函式的非 Null 結果,如果沒有,則傳回 null。

SearchValues(Int64, IFunction)

傳回非 Null 結果,從在每個值上套用指定的搜尋函式,如果沒有,則傳回 null。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
Size()

要新增

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

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

(繼承來源 Object)
ToString()

傳回物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

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

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

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

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

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

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

(繼承來源 Object)
IJavaPeerable.JniManagedPeerState

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

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

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

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

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

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

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

(繼承來源 Object)

擴充方法

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

GetJniTypeName(IJavaPeerable)

哈希表支援擷取的完整並行,以及更新的高預期並行存取。

適用於