1. 程式人生 > >HashMap與HashSet的區別(源於LeetCode2&3)

HashMap與HashSet的區別(源於LeetCode2&3)

HashSet:

  HashSet實現了Set介面,它不允許集合中出現重複元素。當我們提到HashSet時,第一件事就是在將物件儲存在

HashSet之前,要確保重寫hashCode()方法和equals()方法,這樣才能比較物件的值是否相等,確保集合中沒有

儲存相同的物件。如果不重寫上述兩個方法,那麼將使用下面方法預設實現:

public boolean add(Object obj)方法用在Set新增元素時,如果元素值重複時返回 "false",如果新增成功則返回"true"

HashMap:

  HashMap實現了Map介面,Map介面對鍵值對進行對映。Map中不允許出現重複的鍵(Key)。Map介面有兩個基本的實現

TreeMap和HashMap。TreeMap儲存了物件的排列次序,而HashMap不能。HashMap可以有空的鍵值對(Key(null)-Value(null)),HashMap是非執行緒安全的(非Synchronize),要想實現執行緒安全,那麼需要呼叫collections類的靜態方法synchronizeMap()實現。

public Object put(Object Key,Object value)方法用來將元素新增到map中。

HashSet與HashMap的區別:

HashMap HashSet
實現了Map介面 實現Set介面
儲存鍵值對 僅儲存物件
呼叫put()向map中新增元素 呼叫add()方法向Set中新增元素
HashMap使用鍵(Key)計算Hashcode

HashSet使用成員物件來計算hashcode值,對於兩個物件來說hashcode可能相同,所以equals()方法用來判斷物件的相等性,如果兩個物件不同的話,那麼返回false

HashMap相對於HashSet較快,因為它是使用唯一的鍵獲取物件 HashSet較HashMap來說比較慢