您好,登錄后才能下訂單哦!
小編給大家分享一下java set有什么用,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
java.util.Set接口和java.util.List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進行功能上的擴充,只是比Collection接口更加嚴格了。與List接口不同的是,Set接口中元素無序,并且都會以某種規則保證存入的元素不出現重復。
Set集合有多個子類,這里我們介紹其中的java.util.HashSet、java.util.LinkedHashSet這兩個集合。
特點:都會以某種規則保證存入的元素不出現重復,Set接口中元素無序
①元素不出現重復
②元素無序( 指存取無序)
哈希表:只要往哈希表中存儲自定義對象,那么該自定義對象 所屬的類 必須重寫hashCode&equals方法
⑴HashSet集合
底層是通過HashMap實現的 底層new HashMap對象 ,只用了 key 并沒有使用 value value指向統一地址 new Object()
API介紹:
java.util.HashSet是Set接口的一個實現類,它所存儲的元素是不可重復的,并且元素都是無序的(即存取順序不一致)。java.util.HashSet底層的實現其實是一個java.util.HashMap支持,HashSet是根據對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。保證元素唯一性的方式依賴于:hashCode與equals方法。
特點:
①元素不重復
②存取順序不一致
③良好的存取和查找性能
④元素唯一性的方式依賴于:hashCode與equals方法
HashSet集合存儲數據的結構(哈希表):
在JDK1.8之前,哈希表底層采用數組+鏈表實現,即使用鏈表處理沖突,
同一hash值的鏈表都存儲在一個鏈表里。但是當位于一個桶中的元素較多,
即hash值相等的元素較多時,通過key值依次查找的效率較低。
而JDK1.8中,哈希表存儲采用數組+鏈表+紅黑樹實現,
當鏈表長度超過閾值(8)時,將鏈表轉換為紅黑樹,這樣大大減少了查找時間。
總而言之,JDK1.8引入紅黑樹大程度優化了HashMap的性能,
那么對于我們來講保證HashSet集合元素的唯一,其實就是根據對象的
hashCode和equals方法來決定的。如果我們往集合中存放自定義的對象,
那么保證其唯一,就必須復寫hashCode和equals方法建立屬于當前對象的比較方式。
總結:1.8之前是通過 哈希表底層采用數組+鏈表實現
1.8中是通過哈希表存儲采用數組+鏈表+紅黑樹實現(鏈表長度超過閾值(8)時,將鏈表轉換為紅黑樹,這樣大大減少了查找時間)保證元素其唯一,必須重寫hashCode和equals方法建立屬于當前對象的比較方式
HashSet存儲自定義類型元素(重點):
給HashSet中存放自定義類型元素時,需要重寫對象中的hashCode和equals方法,
建立自己的比較方式,才能保證HashSet集合中的對象唯一
⑵LinkedHashSet
HashSet保證元素唯一,可是元素存放進去是沒有順序的,那么我們要保證有序,怎么辦呢,在HashSet下面有一個子類java.util.LinkedHashSet,它是鏈表和哈希表組合的一個數據存儲結構。
看完了這篇文章,相信你對java set有什么用有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。