最全面複習---Java集合框架---Set

Set接口概述

    一個不包含重複元素的Collection

Set案例

        存儲字符串並遍歷

        存儲自定義對象並遍歷


HashSet類概述

  • 不保證set的迭代順序
  • 特別是它不保證該順序恆久不變

HashSet如何保證元素唯一性?

  • 底層樹結構是哈希表(元素是鏈表的數組)
  • 哈希表依賴於哈希值存儲
  • 添加功能底層以來的兩個方法
    • int hashCode()
    • boolean equals(Object obj)


哈希表:是一個元素爲鏈表的數組。綜合了數組和鏈表的好處(新華字典)

如果對象的哈希值相同了,就會走equals()方法比較變量是否相同,如果不同,添加到集合,相同就不添加

“桶”結構-------(同一頁新華字典,可以有相同拼音的漢字很多個)

        優化代碼:讓對象的哈希值儘可能的不同

哈希值和哪些內容相關呢?

        和對象的成員變量值相關

                所以,最終解決方案:把對象的成員變量值進行相加

                如果是基本類型,直接加值

                如果是引用類型,加哈希值

                爲了進一步區分,把他們乘一些整數


LinkedHashSet

        具有可預知的迭代順序的Set接口的哈希表和鏈表實現

LinkedHashSet:底層數據結構由哈希表和鏈表組成

         哈希表保證元素的唯一性

         鏈表保證元素有序(存儲和取出順序一致)


TreeSet

基於TreeMap的NavigableSet實現,使用元素的自然熟悉怒對元素進行排序,或者根據創建set時提供的Comparator進行排序,具體取決於使用的構造方法

概述:

  • 使用元素的自然順序對元素進行排序
  • 根據創建set時提供的Comparator進行排序
  • 具體取決於使用的構造方法

TreeSet是如何保證元素的排序和唯一性的?

  • 底層數據結構是紅黑樹(紅黑樹是一種自平衡的二叉樹)


1、登錄註冊案例(理解)

2、Set集合(理解)

  1. set集合的特點:無序,唯一
  2. HashSet集合(掌握)
    1. 底層數據結構是哈希表(是一個元素爲鏈表的數組)
    2. 哈希表底層依賴兩個方法
      1. hashCode()
      2. equals()

執行順序:

首先比較哈希值是否相同

相同:繼續執行equals方法

返回true

返回false

不同:直接把元素添加到集合

c.如何保證元素唯一性的呢?

由這兩個方法保證

d.開發的時候代碼自動生成即可

  • HashSet存儲字符串並遍歷
  • HashSet存儲自定義對象並遍歷(對象成員變量值相同即爲同一個元素)
  1. TreeSet集合
    1. 底層數據結構是紅黑樹(一個自平衡二叉樹)
    2. 保證元素排序的方式
      1. 自然排序(元素具備比較性)
        1. 讓元素所屬的類實現Comparable接口
      2. 比較器排序(集合具備比較性)
        1. 讓集合構造方法接受Comparator的實現類對象
    3. 講過的代碼看一遍

4.案例:

  • 獲取無重複的隨機數
  • 鍵盤錄入學生按照總分從高到低輸出

案例代碼:https://github.com/ZhengXinYu666/Day_17

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章