javaset有什么用-創(chuàng)新互聯(lián)

小編給大家分享一下java set有什么用,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、西湖網(wǎng)絡(luò)推廣、小程序設(shè)計(jì)、西湖網(wǎng)絡(luò)營(yíng)銷、西湖企業(yè)策劃、西湖品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供西湖建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:muchs.cn

java.util.Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對(duì)Collection接口進(jìn)行功能上的擴(kuò)充,只是比Collection接口更加嚴(yán)格了。與List接口不同的是,Set接口中元素?zé)o序,并且都會(huì)以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。

Set集合有多個(gè)子類,這里我們介紹其中的java.util.HashSet、java.util.LinkedHashSet這兩個(gè)集合。

特點(diǎn):都會(huì)以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù),Set接口中元素?zé)o序

①元素不出現(xiàn)重復(fù)

②元素?zé)o序( 指存取無(wú)序)

哈希表:只要往哈希表中存儲(chǔ)自定義對(duì)象,那么該自定義對(duì)象 所屬的類 必須重寫hashCode&equals方法

⑴HashSet集合

底層是通過(guò)HashMap實(shí)現(xiàn)的 底層new HashMap對(duì)象 ,只用了 key 并沒有使用 value value指向統(tǒng)一地址 new Object()

API介紹:

java.util.HashSet是Set接口的一個(gè)實(shí)現(xiàn)類,它所存儲(chǔ)的元素是不可重復(fù)的,并且元素都是無(wú)序的(即存取順序不一致)。java.util.HashSet底層的實(shí)現(xiàn)其實(shí)是一個(gè)java.util.HashMap支持,HashSet是根據(jù)對(duì)象的哈希值來(lái)確定元素在集合中的存儲(chǔ)位置,因此具有良好的存取和查找性能。保證元素唯一性的方式依賴于:hashCode與equals方法。

特點(diǎn):

①元素不重復(fù)

②存取順序不一致

③良好的存取和查找性能

④元素唯一性的方式依賴于:hashCode與equals方法

HashSet集合存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)(哈希表):

在JDK1.8之前,哈希表底層采用數(shù)組+鏈表實(shí)現(xiàn),即使用鏈表處理沖突,

同一hash值的鏈表都存儲(chǔ)在一個(gè)鏈表里。但是當(dāng)位于一個(gè)桶中的元素較多,

即hash值相等的元素較多時(shí),通過(guò)key值依次查找的效率較低。

而JDK1.8中,哈希表存儲(chǔ)采用數(shù)組+鏈表+紅黑樹實(shí)現(xiàn),

當(dāng)鏈表長(zhǎng)度超過(guò)閾值(8)時(shí),將鏈表轉(zhuǎn)換為紅黑樹,這樣大大減少了查找時(shí)間。

總而言之,JDK1.8引入紅黑樹大程度優(yōu)化了HashMap的性能,

那么對(duì)于我們來(lái)講保證HashSet集合元素的唯一,其實(shí)就是根據(jù)對(duì)象的

hashCode和equals方法來(lái)決定的。如果我們往集合中存放自定義的對(duì)象,

那么保證其唯一,就必須復(fù)寫hashCode和equals方法建立屬于當(dāng)前對(duì)象的比較方式。

總結(jié):1.8之前是通過(guò) 哈希表底層采用數(shù)組+鏈表實(shí)現(xiàn)

1.8中是通過(guò)哈希表存儲(chǔ)采用數(shù)組+鏈表+紅黑樹實(shí)現(xiàn)(鏈表長(zhǎng)度超過(guò)閾值(8)時(shí),將鏈表轉(zhuǎn)換為紅黑樹,這樣大大減少了查找時(shí)間)保證元素其唯一,必須重寫hashCode和equals方法建立屬于當(dāng)前對(duì)象的比較方式

HashSet存儲(chǔ)自定義類型元素(重點(diǎn)):

給HashSet中存放自定義類型元素時(shí),需要重寫對(duì)象中的hashCode和equals方法,

建立自己的比較方式,才能保證HashSet集合中的對(duì)象唯一

⑵LinkedHashSet

HashSet保證元素唯一,可是元素存放進(jìn)去是沒有順序的,那么我們要保證有序,怎么辦呢,在HashSet下面有一個(gè)子類java.util.LinkedHashSet,它是鏈表和哈希表組合的一個(gè)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。

看完了這篇文章,相信你對(duì)java set有什么用有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文題目:javaset有什么用-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://muchs.cn/article48/degiep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站品牌網(wǎng)站制作、自適應(yīng)網(wǎng)站品牌網(wǎng)站建設(shè)、App開發(fā)、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)