HashSet HashTable 與 TreeSet,hashsettreeset

來源:互聯網
上載者:User

HashSet HashTable 與 TreeSet,hashsettreeset
HashSet<T>類

HashSet<T>類主要是設計用來做高效能集運算的,例如對兩個集合求交集、並集、差集等。集合中包含一組不重複出現且無特性順序的元素。

HashSet<T>的一些特性如下:

1、HashSet<T>中的值不能重複且沒有順序。

2、HashSet<T>的容量會按需自動添加。

構造方法:

HashSet() 預設相等比較子建立一個空的新執行個體。

HashSet(IEnumerable<T> collection)  把指定集合中的collection中的資料複製到集中

HashSet(IEqualityComparer<T> comparer)  使用指定的相等比較子建立一個空的新執行個體

HashSet(IEnumerable<T> collection,IEqualityComparer<T> comparer)  使用指定的比較子執行個體化資料,且將指定集合中的元素複製到集合中。

因為HashSet<T>是專門設計來做集合運算的,因此它提供的方法中有不少是和集合運算相關的。

以下給出它的一些常用方法介紹

成員        類型        說明

Add        方法        將指定的元素添加到集合中

Clear        方法         清空集合中的所有元素

Contains        方法         確定某元素是否在HashSet<T>中

Exists        方法         確定HashSet<T>是否包含於指定條件相匹配的元素

ExceptWith    方法         從當前HashSet<T>移除指定集合中的所有元素

IntersectWith     方法        修改當前的HashSet<T>對象,以僅包含該對象和指定集合中存在的元素

IsProperSubsetOf  方法        確定HashSet<T>對象是否為指定集合的真子集

IsProperSupersetOf 方法        確定HashSet<T>對象是否為指定集合的真超集

IsSunsetOf     方法         確定HashSet<T>對象是否為指定集合的子集

IsSupersetOf    方法         確定HashSet<T>對象是否為指定集合的超集

Remove      方法         從HashSet<T>對象中移除指定的元素

RemoveWhere    方法         從HashSet<T>集合中移除與指定謂詞所定義的條件相匹配的所有元素

SetEquals     方法         確定HashSet<T>對象與指定的集合中是否包含相同的元素

SynmmetricExceptWith  方法     修改當前的HashSet<T>對象,以僅包含該對象或指定集合中存在的元素

TrimExcess    方法         將HashSet<T>對象的容量設定為它所包含的元素的實際個數,向上舍入為接近的特性與實現的值。

UnionWith     方法         修改當前的HashSet<T>對象,以包含該對象本身和指定集合中存在的所有元素

 

 TreeSet 

TreeSet是依靠TreeMap來實現的。
TreeSet是一個有序集合,TreeSet中的元素將按照升序排列,預設是按照自然排序進行排列,意味著TreeSet中的元素要實現Comparable介面。或者有一個自訂的比較子。
我們可以在構造TreeSet對象時,傳遞實現Comparator介面的比較子對象。

 

TreeSet與HashSet的區別

1. HashSet是通過HashMap實現的,TreeSet是通過TreeMap實現的,只不過Set用的只是Map的key

2. Map的key和Set都有一個共同的特性就是集合的唯一性.TreeMap更是多了一個排序的功能.

3. hashCode和equal()是HashMap用的, 因為無需排序所以只需要關註定位和唯一性即可.

a. hashCode是用來計算hash值的,hash值是用來確定hash表索引的.

b. hash表中的一個索引處存放的是一張鏈表, 所以還要通過equal方法迴圈比較鏈上的每一個對象 才可以真正定位到索引值對應的Entry.

c. put時,如果hash表中沒定位到,就在鏈表前加一個Entry,如果定位到了,則更換Entry中的value,並返回舊value

4. 由於TreeMap需要排序,所以需要一個Comparator為索引值進行大小比較.當然也是用Comparator定位的.

a. Comparator可以在建立TreeMap時指定

b. 如果建立時沒有確定,那麼就會使用key.compareTo()方法,這就要求key必須實現Comparable介面.

c. TreeMap是使用Tree資料結構實現的,所以使用compare介面就可以完成定位了.

 

HashTable

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()方法來區別這兩種情況。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.