java中hashmap和hashtable有什么區(qū)別

小億
82
2024-05-21 16:17:35

  1. 線程安全性:Hashtable是線程安全的,而HashMap是非線程安全的。如果需要在多線程環(huán)境下使用,應(yīng)該使用Hashtable或者使用ConcurrentHashMap代替HashMap。

  2. null鍵值:Hashtable不允許鍵值為null,如果試圖存儲(chǔ)null鍵值會(huì)拋出NullPointerException異常;而HashMap允許鍵值為null,可以存儲(chǔ)null鍵值。

  3. 繼承關(guān)系:Hashtable是基于Dictionary類的一個(gè)具體實(shí)現(xiàn)類,而HashMap是基于AbstractMap類的一個(gè)具體實(shí)現(xiàn)類。Hashtable已經(jīng)不推薦使用,應(yīng)該使用HashMap或者ConcurrentHashMap代替。

  4. 迭代器:Hashtable的迭代器是通過(guò)Enumeration接口實(shí)現(xiàn)的,而HashMap的迭代器是通過(guò)Iterator接口實(shí)現(xiàn)的。使用Iterator接口更方便、更安全。

  5. 初始容量和擴(kuò)容機(jī)制:Hashtable的初始容量為11,負(fù)載因子為0.75,擴(kuò)容時(shí)容量翻倍;而HashMap的初始容量為16,負(fù)載因子為0.75,擴(kuò)容時(shí)容量增加為原容量的兩倍。HashMap的默認(rèn)初始容量更大,性能更好。

0