HashMap和Hashtable、HashSet的區別


HashMap和Hashtable的區別:

⒈Hashtable是同步的,而HashMap不是。這就意味着你可以不用采取任何特殊的行為就可以在一個多線程的應用程序中用一個Hashtable,

但你必須同樣地為一個HashMap提供外同步。一個方便的方法就是利用Collections工具類種靜態的synchronizedMap()方法,

它創建一個線程安全的Map對象,並把它作為一個封裝的對象來返回。這個對象的方法可以讓你同步訪問潛在的HashMap。

這么做的結果就是當你不需要同步時,你不能切斷Hashtable中的同步(比如在一個單線程的應用程序中)。

⒉HashMap可以讓你將空值作為一個表的條目的key或value。HashMap中只有一條記錄可以是一個空的key,但任意數量的條目可以是空的value。

這就是說,如果在表中沒有發現搜索鍵,或者如果發現了搜索鍵,但它是一個空的值,那么get()將返回null。

如果有必要,用containKey()方法來區別這兩種情況。

⒊繼承的父類不同,但是都實現了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

HashMap和HashSet的區別:⒈HashMap實現了Map接口,Map接口對鍵值對進行映射。Map中不允許重復的鍵。

Map接口有兩個基本的實現,HashMap和TreeMap。TreeMap保存了對象的排列次序,而HashMap則不能。

HashMap允許鍵和值為null。HashMap是非synchronized的,但collection框架提供方法能保證HashMap synchronized,

這樣多個線程同時訪問HashMap時,能保證只有一個線程更改Map。

HashSet實現了Set接口,它不允許集合中有重復的值,當我們將對象存儲在HashSet之前,要先確保對象重寫equals()和hashCode()方法,

這樣才能比較對象的值是否相等,以確保set中沒有儲存相等的對象。如果我們沒有重寫這兩個方法,將會使用這個方法的默認實現。

總結:

 

   HashMap                         HashSet

 

 

1.HashMap實現了Map接口           HashSet實現了Set接口

 

 

2.HashMap儲存鍵值對               HashSet僅僅存儲對象

 

 

3.使用put()方法將元素               使用add()方法將元素放入set中

 

   放入map中

 

 

4.HashMap中使用鍵對象來計算      HashSet使用成員對象來計算hashcode值,對於

 

   hashcode值                      兩個對象來說hashcode可能相同,所以equals()

 

                                     方法用來判斷對象的相等性,如果兩個對象不同

 

                                     的話,那么返回false

 

5.HashMap比較快,因為它使用     HashSet較HashMap來說比較慢

 

   唯一的鍵來獲取對象

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM