淺析Java中Map與HashMap,Hashtable,HashSet的差別。本站提示廣大學習愛好者:(淺析Java中Map與HashMap,Hashtable,HashSet的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析Java中Map與HashMap,Hashtable,HashSet的差別正文
HashTable和HashMap差別
第一,繼續的父類分歧。
Hashtable繼續自Dictionary類,而HashMap繼續自AbstractMap類。但兩者都完成了Map接口。
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
第二,線程平安性分歧。
Hashtable 中的辦法是Synchronize的,而HashMap中的辦法在缺省情形下長短Synchronize的。在多線程並發的情況下,可以直接應用Hashtable,不須要本身為它的辦法完成同步,但應用HashMap時就必需要本身增長同步處置。
第三,能否供給contains辦法
HashMap把Hashtable的contains辦法去失落了,改成containsValue和containsKey,由於contains辦法輕易讓人惹起誤會。
Hashtable則保存了contains,containsValue和containsKey三個辦法,個中contains和containsValue功效雷同。
第四,key和value能否許可null值。
個中key和value都是對象,而且不克不及包括反復key,但可以包括反復的value。
Hashtable中,key和value都不許可湧現null值。
HashMap中,null可以作為鍵,如許的鍵只要一個;可以有一個或多個鍵所對應的值為null。當get()辦法前往null值時,能夠是 HashMap中沒有該鍵,也能夠使該鍵所對應的值為null。是以,在HashMap中不克不及由get()辦法來斷定HashMap中能否存在某個鍵, 而應當用containsKey()辦法來斷定。
第五,兩個遍歷方法的外部完成上分歧。
Hashtable、HashMap都應用了 Iterator。而因為汗青緣由,Hashtable還應用了Enumeration的方法 。
第六,hash值分歧。
哈希值的應用分歧,HashTable直接應用對象的hashCode。而HashMap從新盤算hash值。
第七,外部完成應用的數組初始化和擴容方法分歧。
Hashtable和HashMap它們兩個外部完成方法的數組的初始年夜小和擴容的方法。HashTable中hash數組默許年夜小是11,增長的方法是 old*2+1。
HashMap中hash數組的默許年夜小是16,並且必定是2的指數。