HashMap, HashTable有什麼區別?

2021-10-08 21:02:34 字數 839 閱讀 4441

跟hashmap相比hashtable是執行緒安全的,適合在多執行緒的情況下使用,但是他在對資料操作的時候都會上synchronzied鎖,所以效率比較低下。

hashtable 是不允許鍵或值為 null 的,hashmap 的鍵值則都可以為 null。這是因為hashtable使用的是安全失敗機制(fail-safe),這種機制會使你此次讀到的資料不一定是最新的資料。如果你使用null值,就會使得其無法判斷對應的key是不存在還是為空,因為你無法再呼叫一次contain(key)來對key是否存在進行判斷,concurrenthashmap同理。

實現方式不同:hashtable 繼承了 dictionary類,而 hashmap 繼承的是 abstractmap 類。dictionary 是 jdk 1.0 新增的,貌似沒人用過這個,我也沒用過。

初始化容量不同:hashmap 的初始容量為:16,hashtable 初始容量為:11,兩者的負載因子預設都是:0.75。

擴容機制不同:當現有容量大於總容量 * 負載因子時,hashmap 擴容規則為當前容量翻倍,hashtable 擴容規則為當前容量翻倍 + 1。

迭代器不同:hashmap 中的 iterator 迭代器是 fail-fast 的,而 hashtable 的 enumerator 不是 fail-fast 的。

所以,當其他執行緒改變了hashmap 的結構,如:增加、刪除元素,將會丟擲concurrentmodificationexception 異常,而 hashtable 則不會。

SRAM DRAM Flash DDR有什麼區別

sram sram的全稱是static rnadom access memory,翻譯過來即靜態隨機儲存器。這裡的靜態是指這種儲存器只需要保持通電,裡面的資料就可以永遠保持。但是當斷點之後,裡面的資料仍然會丟失。由於sram的成本很高,所以像諸如cpu的快取記憶體,才會採用sram。dram dra...

SAS scsi sata ide硬碟有什麼區別

sata是serial ata的縮寫,即序列ata。這是一種完全不同於並行ata的新型硬碟介面型別,由於採用序列方式傳輸資料而得名。sata匯流排使用嵌入式時鐘訊號,具備了更強的糾錯能力,與以往相比其最大的區別在於能對傳輸指令 不僅僅是資料 進行檢查,如果發現錯誤會自動矯正,這在很大程度上提高了資料...

atomic 和 nonatomic 有什麼區別

atomic 和 nonatomic 的區別在於,系統自動生成的 getter setter 方法不一樣。atomic 變數預設是有該有屬性的,這個屬性是為了保證在多執行緒的情況下,編譯器會自動生成一些互斥加鎖的 避免該變數的讀寫不同步的問題。nonatomic 如果該物件無需考慮多執行緒的情況,這...