HashSet
HashSet
HashSet
1、HashSet
2、HashSet
構造方法:
HashSet() 預設相等比較器建立一個空的新實例。
HashSet(IEnumerable
HashSet(IEqualityComparer
以下給出它的一些常用方法介紹
中
Exists 方法確定HashSet
是否包含於指定條件相匹配的元素ExceptWith 『 方法可從目前的修改/現有元素修改對象,以僅包含該對象和指定集合中存在的元素
物件是否為指定集合的真子集
物件是否為指定集合的真 集子是否為指定集合的直〜〜㟀集
物件是否為指定集合的超集
物件中從指定的元素中移除」設定。詞所定義的條件相符的所有元素
物件與指定的集合中是否包含相同的元素
SynmmetricExceptWith 〜〜pashSet
🎎 Map來實現的。
TreeSet與HashSet的區別
3. hashCode和equal()是HashMap用的, 因為無需排序所以只需要關注定位和唯一性即可.
a. Comparator可以在創建TreeMap時指定
Hashtables(雜湊表)在電腦領域中已不 是新概念了。它們是用來加快電腦的處理速度的,用當今的標準來處理,速度非常慢,而它們可以讓你在查詢許多資料條目時,很快地找到一個特殊的條目。 儘管現代的機器速度已快了幾千倍,但是為了得到應用程式的最佳效能,hashtables仍然是個很有用的方法。
Hashtable和HashMap物件可以讓你把一個key和一個value結合起來,並用put() 方法把這對key/value輸入到表中。然後你可以透過呼叫get()方法,把key當作參數來得到這個value(值)。只要滿足兩個基本的要求, key和value可以是任何物件。注意,因為key和value必須是對象,所以原始型別(primitive types)必須運用諸如Integer(int)的方法轉換成物件。
為了將一個特定類別的物件用來做一個key,這個類別必須提供兩個方法,equals() 和 hashCode()。這兩個方法在java.lang.Object中,所以所有的類別都可以繼承這兩個方法;但是,這兩個方法在Object類別中的實作一般沒什麼用,所以你通常需要自己重載這兩個方法。
Equals ()方法把它的物件同另一個物件進行比較,如果這兩個物件代表相同的訊息,則傳回true。該方法也查看並確保這兩個物件屬於相同的類別。如果兩個參考對象 是完全一樣的對象,Object.equals()會傳回true,這就說明了為什麼這個方法通常不是很適合的原因。在大多數情況下,你需要一個方法來一個 字段一個字段地進行比較,所以我們認為代表相同數據的不同對像是相等的。
HashCode()方法透過運用物件的內容執行一個雜湊函數來產生一個int值。 Hashtable和HashMap用這個值來算出一對key/value位於哪個bucket(雜湊元)(或列表)中。 Hashtable效能
影響hashtable功效的主要因素就是表中列表的平均長度,因為平均搜尋時間與這個平均長度直接相關。很顯然, 要減小平均長度,你必須增加hashtable中列表的數量;如果列表數量非常大,以至於大多數列表或所有列表只包含一條記錄,你就會獲得最佳的搜索效 率。然而,這樣做可能太過分了。如果你的hashtable的列表數遠遠多於資料條目,那你就沒有必要做這樣的記憶體花費了,而在某些情況下,人們也不可能 接受這樣的做法。
ashtable和HashMap
Hashtable和HashMap類別有三個重要的差異。第一個不同主要是歷史原因。 Hashtable是基於陳舊的Dictionary類別的,HashMap是Java 1.2引進的Map介面的實作。
也許最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。這意味著,雖然你可以不用採取任何特殊的行為就可以在一個多 線程的應用程式中用一個Hashtable,但你必須同樣地為一個HashMap提供外同步。一個方便的方法就是利用Collections類別的靜態的 synchronizedMap()方法,它創建一個線程安全的Map對象,並把它作為一個封裝的對象來返回。這個物件的方法可以讓你同步存取潛在的HashMap。這麼做的結果就是當你不需要同步時,你不能切斷Hashtable中的同步(例如在一個單執行緒的應用程式中),而且同步增加了很多處理費用。
第三點不同是,只有HashMap可以讓你將空值作為一個表的條目的key或value。 HashMap中只有一筆記錄可以是空的key,但任 意數量的條目可以是空的value。這就是說,如果在表中沒有發現搜尋鍵,或者如果發現了搜尋鍵,但它是一個空的值,那麼get()將傳回null。如果 有必要,用containKey()方法來區別這兩種情況。