上一篇我們說完了List類和其一些常用的子實現(xiàn)類,這篇我們說下Set類和其常用的子實現(xiàn)類;
集合類的相關總結(一)
Set<E>類
-
特點:
- 不包含重復數(shù)據
- 最多只包含一個空元素
- 無序
- 只是個接口吹由,本身沒有實現(xiàn)
-
方法摘要:
- add(E e) 如果set中尚未存在指定的元素則添加次元素,返回true犯犁,反之不改變set返回false享钞。
- addAll(Collection<? extends E> c) 如果set中沒有指定collection 中的所有元素,則將其添加到此 set 中愉适,返回true犯助;
- clear() 清除set中的所有元素
- contains(Object o) 如果 set 包含指定的元素,則返回 true维咸。
- containsAll(Collection<? extends E> c) 如果此 set 包含指定 collection 的所有元素剂买,則返回 true。
- isEmpty() 如果set不包含元素癌蓖,則返回ture瞬哼。
- iterator() 返回返回一個迭代器
- remove(Object o) 如果 set 中存在指定的元素,則將其移除(可選操作)租副。
- removeAll(Collection<? extends E> c) 移除 set 中那些包含在指定 collection 中的元素(可選操作)坐慰。
- retainAll(Collection<? extends E> c) 僅保留 set 中那些包含在指定 collection 中的元素(可選操作)。
- size() 返回set中元素的數(shù)量
- toArray() 返回一個包含set中所有元素的數(shù)組
HashSet<E>類
- 概述:
此類實現(xiàn)不是同步的用僧,如果多個線程同時訪問一個 ArrayList 實例结胀,而其中至少一個線程從結構上修改了列表,那么它必須 保持外部同步责循。(結構上的修改是指任何添加或刪除一個或多個元素的操作糟港,或者顯式調整底層數(shù)組的大小院仿;僅僅設置元素的值不是結構上的修改)可以在創(chuàng)建的時候用Collections.synchronizedList方法將對象“包裝起來”秸抚。
** Set s = Collections.synchronizedSet(new HashSet(...));**
- 構造方法
- HashSet() 構造一個新的空 set。
- HashSet(Collection<? extends E> c) 構造一個包含指定 collection 中的元素的新 set歹垫。
- HashSet(int initialCapacity) 構造一個指定容量大小的set
- HashSet(int initialCapacity, float loadFactor) 構造一個新的空 set耸别,其底層 HashMap 實例具有指定的初始容量和指定的加載因子。
- 方法摘要:和Set<E>類的方法完全一樣县钥!
TreeSet<E>類
特點:
有順序的set集合秀姐,并且通過比較器對指定順序的規(guī)則
線程不同步
構造方法:
TreeSet() 構造一個新的空的set,該 set 根據其元素的自然順序進行排序若贮。
TreeSet(Collection<? extends E> c) 構造一個包含指定c元素的新TreeSet集合省有,它按照其元素的自然順序進行排序痒留。
TreeSet(Comparator<? super E> comparator) 構造一個新的空 TreeSet,它根據指定比較器進行排序蠢沿。
TreeSet(SortedSet<E> s) 構造一個與指定有序 set 具有相同映射關系和相同排序的新 TreeSet伸头。
方法摘要:
add(E e) 將指定的元素添加到此 set(如果該元素尚未存在于 set 中)。
addAll(Collection<? extend E> c) 將指定 collection 中的所有元素添加到此 set 中舷蟀。
clear() 移除此 set 中的所有元素恤磷。
isEmpty() 如果此 set 不包含任何元素,則返回 true野宜。
comparator() 返回對此 set 中的元素進行排序的比較器扫步;如果此 set 使用其元素的自然排序,則返回null匈子;
contains(Object o) 如果此 set 包含指定的元素河胎,則返回 true。
descendingIterator() 返回在此 set 元素上按降序進行迭代的迭代器虎敦。
iterator() 返回在此 set 中的元素上按升序進行迭代的迭代器游岳。
descendingSet() 返回此 set 中所包含元素的逆序視圖。
first() 返回此 set 中當前第一個(最低)元素其徙。
last() 返回此 set 中當前最后一個(最高)元素胚迫。
higher(E e) 返回此 set 中嚴格大于給定元素的最小元素;如果不存在這樣的元素唾那,則返回 null晌区。
lower(E e) 返回此 set 中嚴格小于給定元素的最大元素;如果不存在這樣的元素通贞,則返回 null朗若。
ceiling(E e) 返回此 set 中大于等于給定元素的最小元素;如果不存在這樣的元素昌罩,則返回 null哭懈。
floor(E e) 返回此 set 中小于等于給定元素的最大元素;如果不存在這樣的元素茎用,則返回 null遣总。
pollFirst() 獲取并移除第一個(最低)元素;如果此 set 為空轨功,則返回 null旭斥。
pollLast() 獲取并移除最后一個(最高)元素;如果此 set 為空古涧,則返回 null垂券。
remove(Object o) 將指定的元素從 set 中移除(如果該元素存在于此 set 中)。
size() 返回 set 中的元素數(shù)(set 的容量)羡滑。
subSet(E fromElement,E toElement) 返回此 set 的部分視圖菇爪,其元素從 fromElement(包括)到 toElement(不包括)算芯。
-
subSet(E fromElement, boolean fromInclusive,E toElement, boolean toInclusive )
- fromElement - 返回 set 的低端點
- fromInclusive - 如果低端點要包含在返回的視圖中,則為 true
- toElement - 返回 set 的高端點
- toInclusive - 如果高端點要包含在返回的視圖中凳宙,則為 true
- 如果 fromElement 和 toElement 相等熙揍,則返回的 set 為空,除非 fromExclusive 和 toExclusive 都為 true氏涩。
tailSet(E fromElement) 返回此 set 的部分視圖届囚,其元素大于等于 fromElement。
tailSet(E fromElement, boolean inclusive) 返回此 set 的部分視圖是尖,其元素大于(或等于意系,如果 inclusive 為 true)fromElement。
-
headSet(E toElement) 返回此 set 的部分視圖析砸,其元素嚴格小于 toElement。
- head(E toElement, boolean inclusive) 返回此 set 的部分視圖爆袍,其元素小于(或等于首繁,如果 inclusive 為 true)toElement。
特別注意:
- 如果set是按自然順序進行排序的陨囊,那么set里面的元素必須實現(xiàn)Comparable接口弦疮,否則會報類轉換異常。
- 因為set集合本身是不能含有重復的元素的蜘醋,所以當進行排序的時候胁塞,要特別注意自定義的排序規(guī)則返回0的規(guī)則,不然可能造成數(shù)據的丟失压语,這個可以視具體需求而定啸罢。
代碼展示:
- 構建自然排序的TreeSet集合
從結果可以看出,我在自定義比較規(guī)則中是按照年齡的升序進行排列的胎食,并且可以看到結果出現(xiàn)了兩個42歲的人扰才,那個因為我再自定義比較規(guī)則的時候,判斷當年齡相同時返回的不是0厕怜,如果是0就代表是重復數(shù)據衩匣,那么集合只會保留第一次出現(xiàn)該年齡的元素。例如:
- 構建帶有比較器的TreeSet集合
從結果可以看出是按照字母順序來的粥航,而且不區(qū)分大小寫琅捏。但是如果換成漢字的話,順序好像就不管用了递雀,所以建議還是將漢字轉換為拼音進行比較好柄延。例如:
知識擴展:Comparator類和Comparable類的簡單了解
- Comparator類,俗稱“比較器”缀程,繼承它之后要重寫
@Override
public int compare(Object o1, Object o2) {
return 0;
}
可以看到此方法返回的是一個int類型的數(shù)據拦焚,那么怎么能夠體現(xiàn)排序的原則呢蜡坊?答案就是:
比較用來排序的兩個參數(shù)。根據第一個參數(shù)小于赎败、等于或大于第二個參數(shù)分別返回負整數(shù)秕衙、零或正整數(shù)。我們一般返回的值就是用 -1僵刮、0 或 1据忘。
- Comparable類,此接口強行對實現(xiàn)它的每個類的對象進行整體排序搞糕。這種排序被稱為類的自然排序勇吊,類的 compareTo 方法被稱為它的自然比較方法。
比較用來排序的兩個參數(shù)窍仰。根據第一個參數(shù)小于汉规、等于或大于第二個參數(shù)分別返回負整數(shù)、零或正整數(shù)驹吮。我們一般返回的值就是用 -1针史、0 或 1。