ConcurrentMap和HashMap的區別

2021-05-24 01:51:14 字數 1150 閱讀 4568

類 hashset

所有已實現的介面:serializable, cloneable, iterable, collection, set

此類實現 set 介面,由雜湊表(實際上是乙個 hashmap 例項)支援。它不保證 set 的迭代順序;特別是它不保證該順序恆久不變。此類允許使用 null 元素。

此類為基本操作提供了穩定性能,這些基本操作包括 add、remove、contains 和 size,假定雜湊函式將這些元素正確地分布在桶中。對此 set 進行迭代所需的時間與 hashset 例項的大小(元素的數量)和底層 hashmap 例項(桶的數量)的「容量」的和成比例。因此,如果迭代效能很重要,則不要將初始容量設定得太高(或將載入因子設定得太低)。

注意,此實現不是同步的。如果多個執行緒同時訪問乙個雜湊 set,而其中至少乙個執行緒修改了該 set,那麼它必須 保持外部同步。這通常是通過對自然封裝該 set 的物件執行同步操作來完成的。如果不存在這樣的物件,則應該使用 collections.synchronizedset 方法來「包裝」 set。最好在建立時完成這一操作,以防止對該 set 進行意外的不同步訪問:

set s = collections.synchronizedset(new hashset(...));

類 hashmap

所有已實現的介面:serializable, cloneable, map

基於雜湊表的 map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。(除了非同步和允許使用 null 之外,hashmap 類與 hashtable 大致相同。)此類不保證對映的順序,特別是它不保證該順序恆久不變。

類 concurrenthashmap

所有已實現的介面:

serializable, concurrentmap, map

支援獲取的完全併發和更新的所期望可調整併發的雜湊表。此類遵守與 hashtable 相同的功能規範,並且包括對應於 hashtable 的每個方法的方法版本。不過,儘管所有操作都是執行緒安全的,但獲取操作不 必鎖定,並且不 支援以某種防止所有訪問的方式鎖定整個表。此類可以通過程式完全與 hashtable 進行互操作,這取決於其執行緒安全,而與其同步細節無關。

此類與 hashtable 相似,但與 hashmap 不同,它不 允許將 null 用作鍵或值。

ConcurrentMap和HashMap的區別

類 hashset 所有已實現的介面 serializable,cloneable,iterable,collection,set 此類實現 set 介面,由雜湊表 實際上是乙個 hashmap 例項 支援。它不保證 set 的迭代順序 特別是它不保證該順序恆久不變。此類允許使用 null 元素。此...

ConcurrentMap原始碼解讀

concurrentmap原始碼解讀 1 concurrentmap按segment進行鎖定 2 concurrentmap讀非空值不鎖,讀到空值會進行鎖定 why 這是因為hashentry還沒有完全構造完成就賦值導致的 3 concurrentmap在對hash表進行修改時,會更新modcoun...

帶 h的和不帶 h的

新的c 標準中,生成新標頭檔案的方法僅僅是將現有c 頭檔名中的 h 去掉。例如,變成了,變成了,等等。對於c標頭檔案,採用同樣的方法,但在每個名字前還要新增乙個c。所以c的變成了,變成了,等等。舊的c 標頭檔案是官方所反對使用的 即,明確列出不再支援 但舊的c標頭檔案則沒有 以保持對c的相容性 下面...