国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

HashSet HashTable 與 TreeSet

高洛峰
發(fā)布: 2016-11-01 15:01:12
原創(chuàng)
1860人瀏覽過(guò)

hashset

hashset類主要是設(shè)計(jì)用來(lái)做高性能集運(yùn)算的,例如對(duì)兩個(gè)集合求交集、并集、差集等。集合中包含一組不重復(fù)出現(xiàn)且無(wú)特性順序的元素。

HashSet的一些特性如下:

1、HashSet中的值不能重復(fù)且沒(méi)有順序。

2、HashSet的容量會(huì)按需自動(dòng)添加。

構(gòu)造方法:

HashSet() 默認(rèn)相等比較器創(chuàng)建一個(gè)空的新實(shí)例。

HashSet(IEnumerable collection)  把指定集合中的collection中的數(shù)據(jù)復(fù)制到集中

HashSet(IEqualityComparer comparer)  使用指定的相等比較器創(chuàng)建一個(gè)空的新實(shí)例

HashSet(IEnumerable collection,IEqualityComparer comparer)  使用指定的比較器實(shí)例化數(shù)據(jù),且將指定集合中的元素復(fù)制到集合中。

因?yàn)镠ashSet是專門設(shè)計(jì)來(lái)做集合運(yùn)算的,因此它提供的方法中有不少是和集合運(yùn)算相關(guān)的。

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

成員        類型        說(shuō)明

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

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

Contains     ? ?方法         確定某元素是否在HashSet

Exists       ?方法         確定HashSet是否包含于指定條件相匹配的元素

ExceptWith    方法         從當(dāng)前HashSet移除指定集合中的所有元素

IntersectWith   ? 方法        修改當(dāng)前的HashSet對(duì)象,以僅包含該對(duì)象和指定集合中存在的元素

IsProperSubsetOf  方法        確定HashSet對(duì)象是否為指定集合的真子集

IsProperSupersetOf 方法        確定HashSet對(duì)象是否為指定集合的真超集

IsSunsetOf     方法         確定HashSet對(duì)象是否為指定集合的子集

IsSupersetOf    方法         確定HashSet對(duì)象是否為指定集合的超集

Remove      方法         從HashSet對(duì)象中移除指定的元素

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

SetEquals     方法         確定HashSet對(duì)象與指定的集合中是否包含相同的元素

SynmmetricExceptWith  方法     修改當(dāng)前的HashSet對(duì)象,以僅包含該對(duì)象或指定集合中存在的元素

TrimExcess    方法         將HashSet對(duì)象的容量設(shè)置為它所包含的元素的實(shí)際個(gè)數(shù),向上舍入為接近的特性與實(shí)現(xiàn)的值。

UnionWith     方法         修改當(dāng)前的HashSet對(duì)象,以包含該對(duì)象本身和指定集合中存在的所有元素

?

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ū)別這兩種情況。

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來(lái)源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問(wèn)題
開(kāi)源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見(jiàn)反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)