小編給大家分享一下java set有什么用,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
10多年的吉州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整吉州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“吉州網(wǎng)站設(shè)計(jì)”,“吉州網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
java.util.Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對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序( 指存取無序)
哈希表:只要往哈希表中存儲(chǔ)自定義對象,那么該自定義對象 所屬的類 必須重寫hashCode&equals方法
⑴HashSet集合
底層是通過HashMap實(shí)現(xiàn)的 底層new HashMap對象 ,只用了 key 并沒有使用 value value指向統(tǒng)一地址 new Object()
API介紹:
java.util.HashSet是Set接口的一個(gè)實(shí)現(xiàn)類,它所存儲(chǔ)的元素是不可重復(fù)的,并且元素都是無序的(即存取順序不一致)。java.util.HashSet底層的實(shí)現(xiàn)其實(shí)是一個(gè)java.util.HashMap支持,HashSet是根據(jù)對象的哈希值來確定元素在集合中的存儲(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í),通過key值依次查找的效率較低。
而JDK1.8中,哈希表存儲(chǔ)采用數(shù)組+鏈表+紅黑樹實(shí)現(xiàn),
當(dāng)鏈表長度超過閾值(8)時(shí),將鏈表轉(zhuǎn)換為紅黑樹,這樣大大減少了查找時(shí)間。
總而言之,JDK1.8引入紅黑樹大程度優(yōu)化了HashMap的性能,
那么對于我們來講保證HashSet集合元素的唯一,其實(shí)就是根據(jù)對象的
hashCode和equals方法來決定的。如果我們往集合中存放自定義的對象,
那么保證其唯一,就必須復(fù)寫hashCode和equals方法建立屬于當(dāng)前對象的比較方式。
總結(jié):1.8之前是通過 哈希表底層采用數(shù)組+鏈表實(shí)現(xiàn)
1.8中是通過哈希表存儲(chǔ)采用數(shù)組+鏈表+紅黑樹實(shí)現(xiàn)(鏈表長度超過閾值(8)時(shí),將鏈表轉(zhuǎn)換為紅黑樹,這樣大大減少了查找時(shí)間)保證元素其唯一,必須重寫hashCode和equals方法建立屬于當(dāng)前對象的比較方式
HashSet存儲(chǔ)自定義類型元素(重點(diǎn)):
給HashSet中存放自定義類型元素時(shí),需要重寫對象中的hashCode和equals方法,
建立自己的比較方式,才能保證HashSet集合中的對象唯一
⑵LinkedHashSet
HashSet保證元素唯一,可是元素存放進(jìn)去是沒有順序的,那么我們要保證有序,怎么辦呢,在HashSet下面有一個(gè)子類java.util.LinkedHashSet,它是鏈表和哈希表組合的一個(gè)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。
看完了這篇文章,相信你對java set有什么用有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!