集合類的相關總結(二)

上一篇我們說完了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集合
1圖片.png

2圖片.png

運行結果.png

從結果可以看出,我在自定義比較規(guī)則中是按照年齡的升序進行排列的胎食,并且可以看到結果出現(xiàn)了兩個42歲的人扰才,那個因為我再自定義比較規(guī)則的時候,判斷當年齡相同時返回的不是0厕怜,如果是0就代表是重復數(shù)據衩匣,那么集合只會保留第一次出現(xiàn)該年齡的元素。例如:


圖片.png

- 構建帶有比較器的TreeSet集合


1圖片.png

2圖片.png

運行結果

從結果可以看出是按照字母順序來的粥航,而且不區(qū)分大小寫琅捏。但是如果換成漢字的話,順序好像就不管用了递雀,所以建議還是將漢字轉換為拼音進行比較好柄延。例如:


圖片.png

知識擴展: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。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末碟狞,一起剝皮案震驚了整個濱河市啄枕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌族沃,老刑警劉巖频祝,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脆淹,居然都是意外死亡常空,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門盖溺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窟绷,“玉大人,你說我怎么就攤上這事咐柜〖骝冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵拙友,是天一觀的道長为狸。 經常有香客問我,道長遗契,這世上最難降的妖魔是什么辐棒? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上漾根,老公的妹妹穿的比我還像新娘泰涂。我一直安慰自己,他們只是感情好辐怕,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布逼蒙。 她就那樣靜靜地躺著,像睡著了一般寄疏。 火紅的嫁衣襯著肌膚如雪是牢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天陕截,我揣著相機與錄音驳棱,去河邊找鬼。 笑死农曲,一個胖子當著我的面吹牛社搅,可吹牛的內容都是我干的。 我是一名探鬼主播乳规,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼形葬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驯妄?” 一聲冷哼從身側響起荷并,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤合砂,失蹤者是張志新(化名)和其女友劉穎青扔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翩伪,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡微猖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缘屹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凛剥。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖轻姿,靈堂內的尸體忽然破棺而出犁珠,到底是詐尸還是另有隱情,我是刑警寧澤互亮,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布犁享,位于F島的核電站,受9級特大地震影響豹休,放射性物質發(fā)生泄漏炊昆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凤巨。 院中可真熱鬧视乐,春花似錦、人聲如沸敢茁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卷要。三九已至渣聚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僧叉,已是汗流浹背奕枝。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓶堕,地道東北人隘道。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像郎笆,于是被迫代替她去往敵國和親谭梗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容

  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 869評論 0 1
  • 集合類簡介 為什么出現(xiàn)集合類远舅?面向對象語言對事物的體現(xiàn)都是以對象的形式,所以為了方便對多個對象的操作痕钢,就要對對象進...
    阿敏其人閱讀 1,406評論 0 7
  • 1. Java基礎部分 基礎部分的順序:基本語法图柏,類相關的語法,內部類的語法任连,繼承相關的語法蚤吹,異常的語法,線程的語...
    子非魚_t_閱讀 31,581評論 18 399
  • Collection接口 Collection接口是所有集合的祖先類随抠。他有兩個構造方法裁着,一個無參構造,一個是帶Co...
    夜幕繁華閱讀 583評論 0 0
  • 去威海辦事拱她,已經念叨了半年多了二驰,一直沒有時間。這次決定出發(fā)前其實是有幾分猶豫椭懊,因為這段時間在外面呆的時間太長...
    李俊霞閱讀 831評論 1 1