亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java集合系列——Set之HashSet和TreeSet介紹(十)

2019-11-06 06:49:06
字體:
來源:轉載
供稿:網友

一.Set的簡介 Set是一個不包含重復元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素。對 e1 和 e2,并且最多包含一個為 null 的元素。

Set的類關系圖:

這里寫圖片描述

1.繼承于Collection接口,具有增刪查改的方法!

2.AbstractCollection抽象類,實現了Collection接口,并實現了里面的一些方法,如isEmpty、contains等。

3.Set的兩個實現類,HashSet和TreeSet - HashSet實現本質其實就是HashMap,HashSet里面的元素是無序的。 - TreeSet實現本質其實就是TreeSet,TreeSet里面的元素是有序的。

二.HashSet 1.概述 HashSet實現Set接口,那么它也是一個不包含重復元素的一個無序的集合,允許使用null,有且僅有一個元素為null!

HashSet也是一個非同步的方法,如果要在多個線程中使用,要注意進行同步封裝!

Set s = Collections.synchronizedSet(new HashSet(...));

HashSet通過iterator()返回的迭代器是fail-fast的。

2.繼承關系和API

HashSet API

類 HashSet<E>java.lang.Object 繼承者 java.util.AbstractCollection<E> 繼承者 java.util.AbstractSet<E> 繼承者 java.util.HashSet<E>類型參數:E - 此 set 所維護的元素的類型所有已實現的接口:Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>

LinkedHashSet繼承了HashSet,實現鏈表的set集合。

(1):構造方法

HashSet() 構造一個新的空 set,其底層 HashMap 實例的默認初始容量是 16,加載因子是 0.75。HashSet(Collection<? extends E> c) 構造一個包含指定 collection 中的元素的新 set。HashSet(int initialCapacity) 構造一個新的空 set,其底層 HashMap 實例具有指定的初始容量和默認的加載因子(0.75)。HashSet(int initialCapacity, float loadFactor) 構造一個新的空 set,其底層 HashMap 實例具有指定的初始容量和指定的加載因子。

(2)方法:

boolean add(E e) 如果此 set 中尚未包含指定元素,則添加指定元素。 void clear() 從此 set 中移除所有元素。 Object clone() 返回此 HashSet 實例的淺表副本:并沒有復制這些元素本身。 boolean contains(Object o) 如果此 set 包含指定元素,則返回 true。 boolean isEmpty() 如果此 set 不包含任何元素,則返回 true。 Iterator<E> iterator() 返回對此 set 中元素進行迭代的迭代器。 boolean remove(Object o) 如果指定元素存在于此 set 中,則將其移除。 int size() 返回此 set 中的元素的數量(set 的容量)。

3.總結

HashSet中含有一個”HashMap類型的成員變量”map,HashSet的操作函數,實際上都是通過map實現的。

有兩種遍歷的方式: (1)使用 Iterator

第一步:根據iterator()獲取HashSet的迭代器。 第二步:遍歷迭代器獲取各個元素。

for(Iterator iterator = set.iterator(); iterator.hasNext(); ) { iterator.next();}

(2)使用foreach

第一步:根據toArray()獲取HashSet的元素集合對應的數組。 第二步:遍歷數組,獲取各個元素。

Object[] object = (String[])set.toArray();for (Object obj : object) System.out.PRintf(obj);

三.TreeSet 1.概述 基于 TreeMap 的 NavigableSet 實現。使用元素的自然順序對元素進行排序,或者根據創建 set 時提供的 Comparator進行排序,具體取決于使用的構造方法。

2.繼承關系和API

TreeSet API (1)繼承關系:

類 TreeSet<E>java.lang.Object 繼承者 java.util.AbstractCollection<E> 繼承者 java.util.AbstractSet<E> 繼承者 java.util.TreeSet<E>類型參數:E - 此 set 維護的元素的類型所有已實現的接口:Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet<E>, Set<E>, SortedSet<E>

繼承于AbstractSet,AbstractSet實現了equals和hashcode方法。

實現了NavigableSet接口,意味著它支持一系列的導航方法。比如查找與指定目標最匹配項。

實現了Cloneable接口,意味著它能被克隆。

實現了java.io.Serializable接口,意味著它支持序列化。

(2)構造方法:

TreeSet() 構造一個新的空 set,該 set 根據其元素的自然順序進行排序。TreeSet(Collection<? extends E> c) 構造一個包含指定 collection 元素的新 TreeSet,它按照其元素的自然順序進行排序。TreeSet(Comparator<? super E> comparator) 構造一個新的空 TreeSet,它根據指定比較器進行排序。TreeSet(SortedSet<E> s) 構造一個與指定有序 set 具有相同映射關系和相同排序的新 TreeSet。

(3)方法:

boolean add(E e) 將指定的元素添加到此 set(如果該元素尚未存在于 set 中)。 boolean addAll(Collection<? extends E> c) 將指定 collection 中的所有元素添加到此 set 中。 E ceiling(E e) 返回此 set 中大于等于給定元素的最小元素;如果不存在這樣的元素,則返回 null。 void clear() 移除此 set 中的所有元素。 Object clone() 返回 TreeSet 實例的淺表副本。 Comparator<? super E> comparator() 返回對此 set 中的元素進行排序的比較器;如果此 set 使用其元素的自然順序,則返回 null。 boolean contains(Object o) 如果此 set 包含指定的元素,則返回 true。 Iterator<E> descendingIterator() 返回在此 set 元素上按降序進行迭代的迭代器。 NavigableSet<E> descendingSet() 返回此 set 中所包含元素的逆序視圖。 E first() 返回此 set 中當前第一個(最低)元素。 E floor(E e) 返回此 set 中小于等于給定元素的最大元素;如果不存在這樣的元素,則返回 null。 SortedSet<E> headSet(E toElement) 返回此 set 的部分視圖,其元素嚴格小于 toElement。 NavigableSet<E> headSet(E toElement, boolean inclusive) 返回此 set 的部分視圖,其元素小于(或等于,如果 inclusive 為 true)toElement。 E higher(E e) 返回此 set 中嚴格大于給定元素的最小元素;如果不存在這樣的元素,則返回 null。 boolean isEmpty() 如果此 set 不包含任何元素,則返回 true。 Iterator<E> iterator() 返回在此 set 中的元素上按升序進行迭代的迭代器。 E last() 返回此 set 中當前最后一個(最高)元素。 E lower(E e) 返回此 set 中嚴格小于給定元素的最大元素;如果不存在這樣的元素,則返回 null。 E pollFirst() 獲取并移除第一個(最低)元素;如果此 set 為空,則返回 null。 E pollLast() 獲取并移除最后一個(最高)元素;如果此 set 為空,則返回 null。 boolean remove(Object o) 將指定的元素從 set 中移除(如果該元素存在于此 set 中)。 int size() 返回 set 中的元素數(set 的容量)。 NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 返回此 set 的部分視圖,其元素范圍從 fromElement 到 toElement。 SortedSet<E> subSet(E fromElement, E toElement) 返回此 set 的部分視圖,其元素從 fromElement(包括)到 toElement(不包括)。 SortedSet<E> tailSet(E fromElement) 返回此 set 的部分視圖,其元素大于等于 fromElement。 NavigableSet<E> tailSet(E fromElement, boolean inclusive) 返回此 set 的部分視圖,其元素大于(或等于,如果 inclusive 為 true)fromElement。

3.總結

(1)TreeSet中不允許使用null元素!在添加的時候如果添加null,則會拋出NullPointerException異常。

(2)TreeSet是基于TreeMap實現的。TreeSet中的元素支持2種排序方式:自然排序 或者 根據創建TreeSet 時提供的 Comparator 進行排序。這取決于使用的構造方法。

(3)TreeSet是非同步的方法。 它的iterator 方法返回的迭代器是fail-fast的。

(4)TreeSet不支持快速隨機遍歷,只能通過迭代器進行遍歷! 例子:

a.使用Iterator順序遍歷

for(Iterator iter = set.iterator(); iter.hasNext(); ) { iter.next();}

b.使用foreach

Object[] object = (Object[])set.toArray();for (Object obj : object) System.out.printf(obj);

四.源碼 對TreeSet和HashSet的源碼不再進行剖析,二者分別是基于TreeMap和HashMap實現的,只是對應的節點中只有key,而沒有value,因此對TreeMap和HashMap比較了解的話,對TreeSet和HashSet的理解就會非常容易。

五.總結對比(使用場景)

1.HashSet是一個無序的集合,基于HashMap實現;TreeSet是一個有序的集合,基于TreeMap實現。

2.HashSet集合中允許有null元素,TreeSet集合中不允許有null元素。

3.HashSet和TreeSet都是非同步!在使用Iterator進行迭代的時候要注意fail-fast。


歡迎訪問我的csdn博客,我們一同成長!

不管做什么,只要堅持下去就會看到不一樣!在路上,不卑不亢!

博客首頁:http://blog.csdn.net/u010648555


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久69精品久久久久久国产越南| 国产成人在线精品| 性色av一区二区咪爱| 国产精品极品尤物在线观看| 日韩中文字幕av| 国产精品精品一区二区三区午夜版| 91在线免费视频| 97国产在线视频| 国产精品一区久久| 欧美午夜视频一区二区| 日韩欧美在线观看视频| 国产成人97精品免费看片| 国内精品久久久久久久| 欧美精品精品精品精品免费| 中文字幕久久久av一区| 欧美精品一区三区| 国产精品成av人在线视午夜片| 国产精品久久久久久久久久99| 欧美大全免费观看电视剧大泉洋| 最新国产成人av网站网址麻豆| 97色在线播放视频| 精品久久久久久久久久久久久久| 久久影视电视剧凤归四时歌| 一区二区欧美日韩视频| 欧美猛交免费看| 欧美日韩成人精品| 久久久久久91| 日韩在线资源网| 久久天天躁狠狠躁夜夜爽蜜月| 上原亚衣av一区二区三区| 中国日韩欧美久久久久久久久| 亚洲精品国产精品久久清纯直播| 日韩av在线导航| 97香蕉超级碰碰久久免费软件| 伊人成人开心激情综合网| 亚洲激情第一页| 亚洲图片欧洲图片av| 日韩激情视频在线| 欧美诱惑福利视频| 久久精品99久久久香蕉| 色琪琪综合男人的天堂aⅴ视频| 精品国产一区久久久| 国外日韩电影在线观看| 在线成人激情视频| 日韩亚洲精品视频| 国产精品一区二区三区久久久| 欧美一级电影免费在线观看| 福利微拍一区二区| 欧美激情欧美狂野欧美精品| 国产精品久久久久77777| 久久免费少妇高潮久久精品99| 国产剧情日韩欧美| 91成人精品网站| 国产欧美精品一区二区三区介绍| 久久色免费在线视频| 久久久久久com| 日韩欧美在线国产| 色爱av美腿丝袜综合粉嫩av| 青青精品视频播放| 久久成人这里只有精品| 国产成人中文字幕| 欧美日韩激情视频8区| 久久频这里精品99香蕉| 日韩美女写真福利在线观看| 国产成人精品免费久久久久| 久热精品视频在线观看一区| 亚洲在线免费视频| 欧美性xxxx极品hd欧美风情| 日本一区二区在线播放| 欧美精品videossex88| 国产精品久久久久久久av电影| 亚洲国内精品在线| 久久精品国产99国产精品澳门| 国模精品一区二区三区色天香| 国产伦精品免费视频| 97人人模人人爽人人喊中文字| 最近2019中文字幕一页二页| 久久精彩免费视频| 欧美性猛交xxxx乱大交极品| 欧美成人合集magnet| 国产精品偷伦视频免费观看国产| 国精产品一区一区三区有限在线| 亚洲精品国精品久久99热| 欧美乱大交xxxxx| 国产精品久久婷婷六月丁香| 亚洲最新av在线| 亚洲欧美日韩成人| 不卡av电影院| 日韩国产欧美精品一区二区三区| 日本成人在线视频网址| 色噜噜国产精品视频一区二区| 国产午夜精品一区理论片飘花| 日韩在线播放一区| 2021久久精品国产99国产精品| 亚洲精品国产综合久久| 国产99久久精品一区二区 夜夜躁日日躁| 国产视频精品在线| 国产午夜精品一区二区三区| 国产精品电影观看| 国产精品视频网| 日本高清视频精品| 日韩亚洲成人av在线| 视频在线观看99| 九九热精品在线| 欧美日韩视频在线| 精品日韩中文字幕| 在线日韩日本国产亚洲| 国产精品亚洲美女av网站| 国产精品成人免费电影| 亚洲精品久久久久久下一站| 亚洲国产婷婷香蕉久久久久久| 欧美孕妇性xx| 亚洲天堂av在线免费观看| 欧美日韩综合视频网址| 国产午夜精品视频| 亚洲国产高清自拍| 日韩一区二区精品视频| 欧美小视频在线| 国产suv精品一区二区三区88区| 亚洲人成在线一二| 日韩精品在线免费观看| 亚洲香蕉av在线一区二区三区| 中文字幕亚洲一区在线观看| 91麻豆桃色免费看| 一个色综合导航| 久久久国产精彩视频美女艺术照福利| 青青草一区二区| 欧美高清在线视频观看不卡| 亚洲国产精品电影在线观看| 亚洲视频国产视频| 精品中文视频在线| 国产精品丝袜白浆摸在线| 亚洲免费av电影| 最近2019中文字幕一页二页| 欧美成人免费全部观看天天性色| 欧美天堂在线观看| 成人黄色大片在线免费观看| 精品国产一区二区三区在线观看| 久久久久久国产| 成人久久久久久久| 欧美性猛交xxxxx水多| 日韩成人中文字幕| 欧美专区国产专区| 久久精品国产亚洲精品2020| 日韩一区二区在线视频| 欧美日韩一区二区免费视频| 日韩欧美一区二区在线| 欧美亚洲视频在线看网址| 第一福利永久视频精品| 欧美在线观看视频| 羞羞色国产精品| 久久99视频免费| 国产主播精品在线| 九九热这里只有在线精品视| 国产精品视频导航| 97免费视频在线播放| 欧美精品国产精品日韩精品| 国产在线一区二区三区| 在线播放国产一区中文字幕剧情欧美| 狠狠久久亚洲欧美专区| 68精品国产免费久久久久久婷婷| 欧美xxxx18性欧美| 欧美伊久线香蕉线新在线| 日韩www在线|