色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

hashmap和hashtable的區別

錢淋西2年前23瀏覽0評論

hashmap和hashtable的區別?

hashmap和hashtable的區別

1、繼承的父類不同

Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類。但二者都實現了Map接口。

2、線程安全性不同

javadoc中關于hashmap的一段描述如下:此實現不是同步的。如果多個線程同時訪問一個哈希映射,而其中至少一個線程從結構上修改了該映射,則它必須保持外部同步。

3、是否提供contains方法

HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因為contains方法容易讓人引起誤解。

Hashtable則保留了contains,containsValue和containsKey三個方法,其中contains和containsValue功能相同。

4、key和value是否允許null值

Hashtable中,key和value都不允許出現null值。但是如果在Hashtable中有類似put(null,null)的操作,編譯同樣可以通過,因為key和value都是Object類型,但運行時會拋出NullPointerException異常,這是JDK的規范規定的。

HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null值時,可能是 HashMap中沒有該鍵,也可能使該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。

5、兩個遍歷方式的內部實現上不同

Hashtable、HashMap都使用了 Iterator。而由于歷史原因,Hashtable還使用了Enumeration的方式 。

6、hash值不同

哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。hashCode是jdk根據對象的地址或者字符串或者數字算出來的int類型的數值。

7、內部實現使用的數組初始化和擴容方式不同

HashTable在不指定容量的情況下的默認容量為11,而HashMap為16,Hashtable不要求底層數組的容量一定要為2的整數次冪,而HashMap則要求一定為2的整數次冪。Hashtable擴容時,將容量變為原來的2倍加1,而HashMap擴容時,將容量變為原來的2倍。

HashMap簡介

HashMap是在JDK1.2中引入的Map的實現類。HashMap是基于哈希表實現的,每一個元素是一個key-value對,其內部通過單鏈表解決沖突問題,容量不足(超過了閥值)時,同樣會自動增長。

Hashtable簡介

Hashtable同樣是基于哈希表實現的,同樣每個元素是一個key-value對,其內部也是通過單鏈表解決沖突問題,容量不足(超過了閥值)時,同樣會自動增長。

Hashtable也是JDK1.0引入的類,是線程安全的,能用于多線程環境中。

Hashtable同樣實現了Serializable接口,它支持序列化,實現了Cloneable接口,能被克隆。

單鏈表 java,hashmap和hashtable的區別