HashMap和Hashtable的區別

2021-10-20 02:42:57 字數 1818 閱讀 2304

hashmap和hashtable的區別

兩者最主要的區別在於hashtable是執行緒安全,而hashmap則非執行緒安全

hashtable的實現方法裡面都新增了synchronized關鍵字來確保執行緒同步,因此相對而言hashmap效能會高一些,我們平時使用時若無特殊需求建議使用hashmap,在多執行緒環境下若使用hashmap需要使用collections.synchronizedmap()方法來獲取乙個執行緒安全的集合(collections.synchronizedmap()實現原理是collections定義了乙個synchronizedmap的內部類,這個類實現了map介面,在呼叫方法時使用synchronized來保證執行緒同步,當然了實際上操作的還是我們傳入的hashmap例項,簡單的說就是collections.synchronizedmap()方法幫我們在操作hashmap時自動新增了synchronized來實現執行緒同步,類似的其它collections.synchronizedxx方法也是類似原理)

hashmap可以使用null作為key,而hashtable則不允許null作為key

雖說hashmap支援null值作為key,不過建議還是盡量避免這樣使用,因為一旦不小心使用了,若因此引發一些問題,排查起來很是費事

hashmap以null作為key時,總是儲存在table陣列的第乙個節點上

hashmap是對map介面的實現,hashtable實現了map介面和dictionary抽象類

hashmap的初始容量為16,hashtable初始容量為11,兩者的填充因子預設都是0.75

hashmap擴容時是當前容量翻倍即:capacity2,hashtable擴容時是容量翻倍+1即:capacity2+1

兩者計算hash的方法不同

hashtable計算hash是直接使用key的hashcode對table陣列的長度直接進行取模

int hash = key.hashcode();

int index = (hash & 0x7fffffff) % tab.length;

hashmap計算hash對key的hashcode進行了二次hash,以獲得更好的雜湊值,然後對table陣列長度取摸

static int indexfor(int h, int length)

複製**

hashmap和hashtable的底層實現都是陣列+鍊錶結構實現

hashset和hashmap、hashtable的區別

除開hashmap和hashtable外,還有乙個hash集合hashset,有所區別的是hashset不是key value結構,僅僅是儲存不重複的元素,相當於簡化版的hashmap,只是包含hashmap中的key而已

通過檢視原始碼也證實了這一點,hashset內部就是使用hashmap實現,只不過hashset裡面的hashmap所有的value都是同乙個object而已,因此hashset也是非執行緒安全的,至於hashset和hashtable的區別,hashset就是個簡化的hashmap的,所以***

下面是hashset幾個主要方法的實現

複製**

private transient hashmapmap;

private static final object present = new object();

public hashset()

public boolean contains(object o)

public boolean add(e e)

public boolean add(e e)

public boolean remove(object o)

public void clear()

HashMap的工作原理和hashtable區別

1.hashmap的工作原理?hashmap底層是陣列 鍊錶 以陣列儲存元素,如有hash相同的元素,在陣列結構中,建立鍊錶結構,再把hash相同的元素放到鍊錶的下乙個節點 基於hashing 雜湊法 雜湊法 是一種將字元組成的字串轉換為固定長度的數值或索引值的方法 的原理。通過put get 方法...

HashMap和LinkedHashMap的區別

hashmap,linkedhashmap,treemap都屬於map map 主要用於儲存鍵 key 值 value 對,根據鍵得到值,因此鍵不允許鍵重複,但允許值重複。hashmap 是乙個最常用的map,它根據鍵的hashcode 值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度。ha...

HashMap和LinkedHashMap的區別

hashmap,linkedhashmap,treemap都屬於map map 主要用於儲存鍵 key 值 value 對,根據鍵得到值,因此鍵不允許鍵重複,但允許值重複。hashmap 是乙個最常用的map,它根據鍵的hashcode 值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度。ha...