HashMap和Hashtable的區別

2022-09-12 15:03:26 字數 1737 閱讀 1572

hashmap和hashtable的比較是j**a面試中的常見問題,用來考驗程式設計師是否能夠正確使用集合類以及是否可以隨機應變使用多種思路解決問題。hashmap的工作原理、arraylist與vector的比較以及這個問題是有關j**a 集合框架的最經典的問題。hashtable是個過時的集合類,存在於j**a api中很久了。在j**a 4中被重寫了,實現了map介面,所以自此以後也成了j**a集合框架中的一部分。hashtable和hashmap在j**a面試中相當容易被問到,甚至成為了集合框架面試題中最常被考的問題,所以在參加任何j**a面試之前,都不要忘了準備這一題。

這篇文章中,我們不僅將會看到hashmap和hashtable的區別,還將看到它們之間的相似之處。

hashmap和hashtable都實現了map介面,但決定用哪乙個之前先要弄清楚它們之間的分別。主要的區別有:執行緒安全性,同步(synchronization),以及速度。

hashmap幾乎可以等價於hashtable,除了hashmap是非synchronized的,並可以接受null(hashmap可以接受為null的鍵值(key)和值(value),而hashtable則不行)。

hashmap是非synchronized,而hashtable是synchronized,這意味著hashtable是執行緒安全的,多個執行緒可以共享乙個hashtable;而如果沒有正確的同步的話,多個執行緒是不能共享hashmap的。j**a 5提供了concurrenthashmap,它是hashtable的替代,比hashtable的擴充套件性更好。

另乙個區別是hashmap的迭代器(iterator)是fail-fast迭代器,而hashtable的enumerator迭代器不是fail-fast的。所以當有其它執行緒改變了hashmap的結構(增加或者移除元素),將會丟擲concurrentmodificationexception,但迭代器本身的remove()方法移除元素則不會丟擲concurrentmodificationexception異常。但這並不是乙個一定發生的行為,要看jvm。這條同樣也是enumeration和iterator的區別。

由於hashtable是執行緒安全的也是synchronized,所以在單執行緒環境下它比hashmap要慢。如果你不需要同步,只需要單一執行緒,那麼使用hashmap效能要好過hashtable。

hashmap不能保證隨著時間的推移map中的元素次序是不變的。

1) sychronized意味著在一次僅有乙個執行緒能夠更改hashtable。就是說任何執行緒要更新hashtable時要首先獲得同步鎖,其它執行緒要等到同步鎖被釋放之後才能再次獲得同步鎖更新hashtable。

2) fail-safe和iterator迭代器相關。如果某個集合物件建立了iterator或者listiterator,然後其它的執行緒試圖「結構上」更改集合物件,將會丟擲concurrentmodificationexception異常。但其它執行緒可以通過set()方法更改集合物件是允許的,因為這並沒有從「結構上」更改集合。但是假如已經從結構上進行了更改,再呼叫set()方法,將會丟擲illegalargumentexception異常。

3) 結構上的更改指的是刪除或者插入乙個元素,這樣會影響到map的結構。

hashmap可以通過下面的語句進行同步:

map m = collections.synchronizemap(hashmap);

hashtable和hashmap有幾個主要的不同:執行緒安全以及速度。僅在你需要完全的執行緒安全的時候使用hashtable,而如果你使用j**a 5或以上的話,請使用concurrenthashmap吧。

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...