HashSet:安全
HashSet實現了Set接口,它不容許集合中出現重複元素。當咱們提到HashSet時,第一件事就是在將對象存儲在線程
HashSet以前,要確保重寫hashCode()方法和equals()方法,這樣才能比較對象的值是否相等,確保集合中沒有code
儲存相同的對象。若是不重寫上述兩個方法,那麼將使用下面方法默認實現:對象
public boolean add(Object obj)方法用在Set添加元素時,若是元素值重複時返回 "false",若是添加成功則返回"true"接口
HashMap:hash
HashMap實現了Map接口,Map接口對鍵值對進行映射。Map中不容許出現重複的鍵(Key)。Map接口有兩個基本的實現io
TreeMap和HashMap。TreeMap保存了對象的排列次序,而HashMap不能。HashMap能夠有空的鍵值對(Key(null)-Value(null))table
HashMap是非線程安全的(非Synchronize),要想實現線程安全,那麼須要調用collections類的靜態方法synchronizeMap()實現。map
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來講比較慢 |