hashset
hashset
HashSet
1、HashSet
2、HashSet
構(gòu)造方法:
HashSet() 默認(rèn)相等比較器創(chuàng)建一個(gè)空的新實(shí)例。
HashSet(IEnumerable
HashSet(IEqualityComparer
HashSet(IEnumerable
因?yàn)镠ashSet
以下給出它的一些常用方法介紹
成員 類型 說(shuō)明
Add 方法 將指定的元素添加到集合中
Clear 方法 清空集合中的所有元素
Contains ? ?方法 確定某元素是否在HashSet
Exists ?方法 確定HashSet
ExceptWith 方法 從當(dāng)前HashSet
IntersectWith ? 方法 修改當(dāng)前的HashSet
IsProperSubsetOf 方法 確定HashSet
IsProperSupersetOf 方法 確定HashSet
IsSunsetOf 方法 確定HashSet
IsSupersetOf 方法 確定HashSet
Remove 方法 從HashSet
RemoveWhere ?方法 從HashSet
SetEquals 方法 確定HashSet
SynmmetricExceptWith 方法 修改當(dāng)前的HashSet
TrimExcess 方法 將HashSet
UnionWith 方法 修改當(dāng)前的HashSet
?
TreeSet
?
TreeSet是依靠TreeMap來(lái)實(shí)現(xiàn)的。
TreeSet是一個(gè)有序集合,TreeSet中的元素將按照升序排列,缺省是按照自然排序進(jìn)行排列,意味著TreeSet中的元素要實(shí)現(xiàn)Comparable接口?;蛘哂幸粋€(gè)自定義的比較器。
我們可以在構(gòu)造TreeSet對(duì)象時(shí),傳遞實(shí)現(xiàn)Comparator接口的比較器對(duì)象。
?
TreeSet與HashSet的區(qū)別
1. HashSet是通過(guò)HashMap實(shí)現(xiàn)的,TreeSet是通過(guò)TreeMap實(shí)現(xiàn)的,只不過(guò)Set用的只是Map的key
2. Map的key和Set都有一個(gè)共同的特性就是集合的唯一性.TreeMap更是多了一個(gè)排序的功能.
3. hashCode和equal()是HashMap用的, 因?yàn)闊o(wú)需排序所以只需要關(guān)注定位和唯一性即可.
a. hashCode是用來(lái)計(jì)算hash值的,hash值是用來(lái)確定hash表索引的.
b. hash表中的一個(gè)索引處存放的是一張鏈表, 所以還要通過(guò)equal方法循環(huán)比較鏈上的每一個(gè)對(duì)象 才可以真正定位到鍵值對(duì)應(yīng)的Entry.
c. put時(shí),如果hash表中沒(méi)定位到,就在鏈表前加一個(gè)Entry,如果定位到了,則更換Entry中的value,并返回舊value
4. 由于TreeMap需要排序,所以需要一個(gè)Comparator為鍵值進(jìn)行大小比較.當(dāng)然也是用Comparator定位的.
a. Comparator可以在創(chuàng)建TreeMap時(shí)指定
b. 如果創(chuàng)建時(shí)沒(méi)有確定,那么就會(huì)使用key.compareTo()方法,這就要求key必須實(shí)現(xiàn)Comparable接口.
c. TreeMap是使用Tree數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的,所以使用compare接口就可以完成定位了.
?
HashTable
Hashtables(哈希表)在計(jì)算機(jī)領(lǐng)域中已不 是一個(gè)新概念了。它們是用來(lái)加快計(jì)算機(jī)的處理速度的,用當(dāng)今的標(biāo)準(zhǔn)來(lái)處理,速度非常慢,而它們可以讓你在查詢?cè)S多數(shù)據(jù)條目時(shí),很快地找到一個(gè)特殊的條目。 盡管現(xiàn)代的機(jī)器速度已快了幾千倍,但是為了得到應(yīng)用程序的最佳性能,hashtables仍然是個(gè)很有用的方法。
?
Hashtable和HashMap對(duì)象可以讓你把一個(gè)key和一個(gè)value結(jié)合起來(lái),并用put() 方法把這對(duì)key/value輸入到表中。然后你可以通過(guò)調(diào)用get()方法,把key作為參數(shù)來(lái)得到這個(gè)value(值)。只要滿足兩個(gè)基本的要求, key和value可以是任何對(duì)象。注意,因?yàn)閗ey和value必須是對(duì)象,所以原始類型(primitive types)必須通過(guò)運(yùn)用諸如Integer(int)的方法轉(zhuǎn)換成對(duì)象。
?
為了將一個(gè)特定類的對(duì)象用做一個(gè)key,這個(gè)類必須提供兩個(gè)方法,equals() 和 hashCode()。這兩個(gè)方法在java.lang.Object中,所以所有的類都可以繼承這兩個(gè)方法;但是,這兩個(gè)方法在Object類中的實(shí)現(xiàn)一般沒(méi)什么用,所以你通常需要自己重載這兩個(gè)方法。
?
Equals ()方法把它的對(duì)象同另一個(gè)對(duì)象進(jìn)行比較,如果這兩個(gè)對(duì)象代表相同的信息,則返回true。該方法也查看并確保這兩個(gè)對(duì)象屬于相同的類。如果兩個(gè)參照對(duì)象 是完全一樣的對(duì)象,Object.equals()返回true,這就說(shuō)明了為什么這個(gè)方法通常不是很適合的原因。在大多數(shù)情況下,你需要一個(gè)方法來(lái)一個(gè) 字段一個(gè)字段地進(jìn)行比較,所以我們認(rèn)為代表相同數(shù)據(jù)的不同對(duì)象是相等的。
?
HashCode()方法通過(guò)運(yùn)用對(duì)象的內(nèi)容執(zhí)行一個(gè)哈希函數(shù)來(lái)生成一個(gè)int值。Hashtable和HashMap用這個(gè)值來(lái)算出一對(duì)key/value位于哪個(gè)bucket(哈希元)(或列表)中。Hashtable性能
影響hashtable功效的主要因素就是表中列表的平均長(zhǎng)度,因?yàn)槠骄阉鲿r(shí)間與這個(gè)平均長(zhǎng)度直接相關(guān)。很顯然, 要減小平均長(zhǎng)度,你必須增加hashtable中列表的數(shù)量;如果列表數(shù)量非常大,以至于大多數(shù)列表或所有列表只包含一條記錄,你就會(huì)獲得最佳的搜索效 率。然而,這樣做可能太過(guò)分了。如果你的hashtable的列表數(shù)遠(yuǎn)遠(yuǎn)多于數(shù)據(jù)條目,那你就沒(méi)有必要做這樣的內(nèi)存花費(fèi)了,而在一些情況下,人們也不可能 接受這樣的做法。
ashtable和HashMap
Hashtable和HashMap類有三個(gè)重要的不同之處。第一個(gè)不同主要是歷史原因。Hashtable是基于陳舊的Dictionary類的,HashMap是Java?1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)。
也許最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。這就意味著,雖然你可以不用采取任何特殊的行為就可以在一個(gè)多 線程的應(yīng)用程序中用一個(gè)Hashtable,但你必須同樣地為一個(gè)HashMap提供外同步。一個(gè)方便的方法就是利用Collections類的靜態(tài)的 synchronizedMap()方法,它創(chuàng)建一個(gè)線程安全的Map對(duì)象,并把它作為一個(gè)封裝的對(duì)象來(lái)返回。這個(gè)對(duì)象的方法可以讓你同步訪問(wèn)潛在的HashMap。這么做的結(jié)果就是當(dāng)你不需要同步時(shí),你不能切斷Hashtable中的同步(比如在一個(gè)單線程的應(yīng)用程序中),而且同步增加了很多處理費(fèi)用。
第三點(diǎn)不同是,只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value。HashMap中只有一條記錄可以是一個(gè)空的key,但任 意數(shù)量的條目可以是空的value。這就是說(shuō),如果在表中沒(méi)有發(fā)現(xiàn)搜索鍵,或者如果發(fā)現(xiàn)了搜索鍵,但它是一個(gè)空的值,那么get()將返回null。如果 有必要,用containKey()方法來(lái)區(qū)別這兩種情況。
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)