日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java set 接口_【Java提高十七】Set接口集合详解

發布時間:2024/9/19 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java set 接口_【Java提高十七】Set接口集合详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三、Set接口

Set是一種不包括重復元素的Collection。它維持它自己的內部排序,所以隨機訪問沒有任何意義。與List一樣,它同樣運行null的存在但是僅有一個。由于Set接口的特殊性,所有傳入Set集合中的元素都必須不同,同時要注意任何可變對象,如果在對集合中元素進行操作時,導致e1.equals(e2)==true,則必定會產生某些問題。實現了Set接口的集合有:EnumSet、HashSet、TreeSet。

3.1、EnumSet

是枚舉的專用Set。所有的元素都是枚舉類型。

3.2、HashSet

HashSet堪稱查詢速度最快的集合,因為其內部是以HashCode來實現的。它內部元素的順序是由哈希碼來決定的,所以它不保證set 的迭代順序;特別是它不保證該順序恒久不變。

HashSet詳解

對于HashSet而言,它是基于HashMap來實現的,底層采用HashMap來保存元素。所以如果對HashMap比較熟悉,那么HashSet是so easy!!

一、定義

HashSet繼承AbstractSet類,實現Set、Cloneable、Serializable接口。其中AbstractSet提供 Set 接口的骨干實現,從而最大限度地減少了實現此接口所需的工作。Set接口是一種不包括重復元素的Collection,它維持它自己的內部排序,所以隨機訪問沒有任何意義。

基本屬性

構造函數

從構造函數中可以看出HashSet所有的構造都是構造出一個新的HashMap,其中最后一個構造函數,為包訪問權限是不對外公開,僅僅只在使用LinkedHashSet時才會發生作用。

二、方法

既然HashSet是基于HashMap,那么對于HashSet而言,其方法的實現過程是非常簡單的。

iterator()方法返回對此 set 中元素進行迭代的迭代器。返回元素的順序并不是特定的。底層調用HashMap的keySet返回所有的key,這點反應了HashSet中的所有元素都是保存在HashMap的key中,value則是使用的PRESENT對象,該對象為static final。

size()返回此 set 中的元素的數量(set 的容量)。底層調用HashMap的size方法,返回HashMap容器的大小。

isEmpty(),判斷HashSet()集合是否為空,為空返回?true,否則返回false。

contains(),判斷某個元素是否存在于HashSet()中,存在返回true,否則返回false。更加確切的講應該是要滿足這種關系才能返回true:(o==null ? e==null : o.equals(e))。底層調用containsKey判斷HashMap的key值是否為空。

add()如果此 set 中尚未包含指定元素,則添加指定元素。如果此Set沒有包含滿足(e==null ? e2==null : e.equals(e2)) 的e2時,則將e2添加到Set中,否則不添加且返回false。由于底層使用HashMap的put方法將key = e,value=PRESENT構建成key-value鍵值對,當此e存在于HashMap的key中,則value將會覆蓋原有value,但是key保持不變,所以如果將一個已經存在的e元素添加中HashSet中,新添加的元素是不會保存到HashMap中,所以這就滿足了HashSet中元素不會重復的特性。

remove如果指定元素存在于此 set 中,則將其移除。底層使用HashMap的remove方法刪除指定的Entry。

clear從此 set 中移除所有元素。底層調用HashMap的clear方法清除所有的Entry。

clone返回此?HashSet?實例的淺表副本:并沒有復制這些元素本身。

后記:

由于HashSet底層使用了HashMap實現,使其的實現過程變得非常簡單,如果你對HashMap比較了解,那么HashSet簡直是小菜一碟。有兩個方法對HashMap和HashSet而言是非常重要的,hashcode和equals。

3.3、TreeSet

基于TreeMap,生成一個總是處于排序狀態的set,內部以TreeMap來實現。它是使用元素的自然順序對元素進行排序,或者根據創建Set 時提供的?Comparator?進行排序,具體取決于使用的構造方法。

TreeSet詳解

一、TreeSet定義

我們知道TreeMap是一個有序的二叉樹,那么同理TreeSet同樣也是一個有序的,它的作用是提供有序的Set集合。通過源碼我們知道TreeSet基礎AbstractSet,實現NavigableSet、Cloneable、Serializable接口。其中AbstractSet提供Set接口的骨干實現,從而最大限度地減少了實現此接口所需的工作。NavigableSet是擴展的SortedSet,具有了為給定搜索目標報告最接近匹配項的導航方法,這就意味著它支持一系列的導航方法。比如查找與指定目標最匹配項。Cloneable支持克隆,Serializable支持序列化。

同時在TreeSet中定義了如下幾個變量。

其構造方法:

二、TreeSet主要方法

1、add:將指定的元素添加到此 set(如果該元素尚未存在于 set 中)。

2、addAll:將指定 collection 中的所有元素添加到此 set 中。

3、ceiling:返回此 set 中大于等于給定元素的最小元素;如果不存在這樣的元素,則返回 null。

4、clear:移除此 set 中的所有元素。

5、clone:返回 TreeSet 實例的淺表副本。屬于淺拷貝。

6、comparator:返回對此 set 中的元素進行排序的比較器;如果此 set 使用其元素的自然順序,則返回 null。

7、contains:如果此 set 包含指定的元素,則返回 true。

8、descendingIterator:返回在此 set 元素上按降序進行迭代的迭代器。

9、descendingSet:返回此 set 中所包含元素的逆序視圖。

10、first:返回此 set 中當前第一個(最低)元素。

11、floor:返回此 set 中小于等于給定元素的最大元素;如果不存在這樣的元素,則返回 null。

12、headSet:返回此 set 的部分視圖,其元素嚴格小于 toElement。

13、higher:返回此 set 中嚴格大于給定元素的最小元素;如果不存在這樣的元素,則返回 null。

14、isEmpty:如果此 set 不包含任何元素,則返回 true。

15、iterator:返回在此 set 中的元素上按升序進行迭代的迭代器。

16、last:返回此 set 中當前最后一個(最高)元素。

17、lower:返回此 set 中嚴格小于給定元素的最大元素;如果不存在這樣的元素,則返回 null。

18、pollFirst:獲取并移除第一個(最低)元素;如果此 set 為空,則返回 null。

19、pollLast:獲取并移除最后一個(最高)元素;如果此 set 為空,則返回 null。

20、remove:將指定的元素從 set 中移除(如果該元素存在于此 set 中)。

21、size:返回 set 中的元素數(set 的容量)。

22、subSet:返回此 set 的部分視圖

23、tailSet:返回此 set 的部分視圖

三、最后

由于TreeSet是基于TreeMap實現的,所以如果我們對treeMap有了一定的了解,對TreeSet那是小菜一碟,我們從TreeSet中的源碼可以看出,其實現過程非常簡單,幾乎所有的方法實現全部都是基于TreeMap的。

總結

以上是生活随笔為你收集整理的java set 接口_【Java提高十七】Set接口集合详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。