首頁 类库下载 java类库 哈希集 HashTable 與 TreeSet

哈希集 HashTable 與 TreeSet

Nov 01, 2016 pm 03:01 PM

HashSet

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

HashSet的一些特性如下:

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

2、HashSet的容量會依需求自動添加。

構造方法:

HashSet() 預設相等比較器建立一個空的新實例。

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

HashSet(IEqualityComparer comparer)〜〕使用指定的相等性比較器來建立一個空的比較

comparer)  使用指定的比較器實例化數據,並將指定集合中的元素複製到集合中。

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

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

成員類型說明

Add        方法將指定的元素添加到集合中       法確定某元素是否在HashSet

Exists        方法確定HashSet

是否包含於指定條件相匹配的元素

ExceptWith 『  方法可從目前的修改/現有元素修改

對象,以僅包含該對象和指定集合中存在的元素

IsProperSubsetOf  方法確定HashSet

物件是否為指定集合的​​真子集

IsProperSupersetOf 方法判斷HashSet

物件是否為指定集合的​​真 集子是否為指定集合的​​直〜〜㟀集

IsSupersetOf    方法確定HashSet

物件是否為指定集合的​​超集

Remove      方法從HashSet

物件中從指定的元素中移除」設定。詞所定義的條件相符的所有元素

SetEquals     方法決定HashSet

物件與指定的集合中是否包含相同的元素

SynmmetricExceptWith  」物件中是否包含相同的元素

SynmmetricExceptWith  」物件中是否包含相同的元素

SynmmetricExceptWith  〜〜pashSet〔中存在的元素」 方法將HashSet

物件的容量設定為它所包含的元素的實際個數,向上捨入為接近的特性與實現的值。

UnionWith     方法           方法         修改當前的HashSet

對象,以包含該對象本身和指定集合中存在的所有元素

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


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24