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

歡迎訪問 生活随笔!

生活随笔

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

java

Java15-day06【Set、HashSet、LinkedHashSet、TreeSet、Comparable、Comparator、泛型类、可变参数的使用】

發布時間:2024/9/30 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java15-day06【Set、HashSet、LinkedHashSet、TreeSet、Comparable、Comparator、泛型类、可变参数的使用】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 視頻+資料(工程源碼、筆記)【鏈接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg? ?提取碼:zjxs】
  • Java基礎--學習筆記(零起點打開java世界的大門)--博客匯總表

目? ?錄

01_Set集合概述和特點

3.1、Set集合概述和特點

02_哈希值

3.2、哈希值

03_HashSet集合概述和特點

3.3、HashSet集合概述和特點

04_HashSet集合保證元素唯一性源碼分析

3.4、HashSet集合保證元素唯一性源碼分析

05_常見數據結構之哈希表

3.5、常見數據結構之哈希表

06_HashSet集合存儲學生對象并遍歷

案例:HashSet集合存儲學生對象并遍歷

自動生成hashCode()與equals()方法:快捷鍵 Alt + Insert

07_LinkedHashSet集合概述和特點

3.6、LinkedHashSet集合概述和特點

08_TreeSet集合概述和特點

3.7、TreeSet集合概述和特點

API-TreeSet

API-NavigableSet

API-Comparable 自然排序接口

API-Comparator

09_自然排序Comparable的使用

3.8、自然排序Comparable的使用

10_比較器排序Comparator的使用

3.9、比較器排序Comparator的使用

11_成績排序

案例:成績排序

1、比較器排序Comparator

2、自然排序Comparable

12_不重復的隨機數

案例:不重復的隨機數

13_泛型概述和好處

4.1、泛型概述

14_泛型類

4.2、泛型類

15_泛型方法

4.3、泛型方法

16_泛型接口

4.4、泛型接口

17_類型通配符

4.5、類型通配符

18_可變參數

4.6、可變參數

19_可變參數的使用

4.7、可變參數的使用

1、public static List asList?(T... a)

2、public static List of?(E... elements)

3、public static Set of?(E... elements)


01_Set集合概述和特點

3.1、Set集合概述和特點

Set集合的特點

  • 元素存取無序
  • 不包含重復元素的集合(不能存儲重復元素)
  • 沒有索引,不能使用普通for循環遍歷,只能通過迭代器或增強for循環遍歷

  • public interface Set<E> extends Collection<E>

Set是接口,不能直接實例化 --> 實現類HashSet

Set集合的基本使用:Set集合練習 存儲字符串并遍歷【?HashSet:對集合的迭代順序不作任何保證】

02_哈希值

3.2、哈希值

哈希值簡介

  • 是JDK根據對象的地址或者字符串或者數字算出來的int類型的數值。

如何獲取哈希值(Object類中,有一個方法可以獲取對象的哈希碼

  • Object類中的 public int hashCode():返回對象的哈希碼值

哈希值的特點

  • 同一個對象多次調用hashCode()方法返回的哈希值是相同的。
  • 默認情況下,不同對象的哈希值是不同的。而重寫hashCode()方法,可以實現讓不同對象的哈希值相同。

03_HashSet集合概述和特點

3.3、HashSet集合概述和特點

HashSet集合的特點

  • 底層數據結構是哈希表。
  • 對集合的迭代順序不作任何保證,也就是說:不保證存儲和取出的元素順序一致。
  • 沒有帶索引的方法,所以不能使用普通for循環遍歷。
  • 由于是Set集合,所以是不包含重復元素的集合。
  • HashSet集合練習:HashSet集合的基本使用---存儲字符串并遍歷

    04_HashSet集合保證元素唯一性源碼分析

    3.4、HashSet集合保證元素唯一性源碼分析

    HashSet集合添加一個元素的過程(HashSet集合保證元素唯一性的圖解):

    HashSet集合保證元素唯一性的原理

  • 根據對象的哈希值計算存儲位置:如果當前位置沒有元素則直接存入;如果當前位置有元素存在,則進入第二步。
  • 當前元素的元素和已經存在的元素比較哈希值:如果哈希值不同,則將當前元素進行存儲;如果哈希值相同,則進入第三步。
  • 通過equals()方法比較兩個元素的內容:如果內容不相同,則將當前元素進行存儲;如果內容相同,則不存儲當前元素。
  • ?HashSet集合存儲元素:

    • 要保證元素唯一性,需要重寫hashCode()equal()

    05_常見數據結構之哈希表

    3.5、常見數據結構之哈希表

    哈希表

    • JDK8之前,底層采用數組+鏈表實現,可以說是一個元素為鏈表的數組。
    • JDK8以后,在長度比較長的時候,底層實現了優化。

    存儲元素:先比較哈希值,哈希值相同的時候,再比較內容。

    06_HashSet集合存儲學生對象并遍歷

    案例:HashSet集合存儲學生對象并遍歷

    // 重復存儲學生對象!保證元素唯一性:HashSet底層數據結構是哈希表,哈希表依賴于2個方法
    // hashCode()與equals() -> 學生類 重寫 hashCode()與equals()

    自動生成hashCode()與equals()方法:快捷鍵 Alt + Insert

    ? ?

    ? ?

    07_LinkedHashSet集合概述和特點

    3.6、LinkedHashSet集合概述和特點

    LinkedHashSet集合特點

  • 哈希表和鏈表實現的Set接口,具有可預測的迭代次序。
  • 由鏈表保證元素有序,也就是說元素的存儲和取出順序是一致的。
  • 由哈希表保證元素唯一,也就是說沒有重復的元素。
  • LinkedHashSet集合基本使用:LinkedHashSet集合練習——存儲字符串并遍歷

    08_TreeSet集合概述和特點

    3.7、TreeSet集合概述和特點

    TreeSet集合概述and特點

    • 元素有序,這里的順序不是指存儲和取出的順序,而是按照一定的規則進行排序,具體排序方式取決于構造方法。

    ? ? ? TreeSet():根據其元素的自然排序進行排序

    ? ? ? TreeSet(Comparator comparator) :根據指定的比較器進行排序

    • 沒有帶索引的方法,所以不能使用普通for循環遍歷。
    • 由于是Set集合,所以不包含重復元素的集合。

    API-TreeSet

    API-NavigableSet

    API-Comparable 自然排序接口

    API-Comparator

    TreeSet集合基本使用:TreeSet集合練習——存儲整數并遍歷

    09_自然排序Comparable的使用

    3.8、自然排序Comparable的使用

    案例需求

    • 存儲學生對象并遍歷,創建TreeSet集合使用無參構造方法
    • 要求:按照年齡從小到大排序,年齡相同時,按照姓名的字母順序排序。

    實現步驟(結論)

    • 用TreeSet集合存儲自定義對象,無參構造方法使用的是自然排序對元素進行排序的。
    • 自然排序,就是讓元素所屬的類實現Comparable接口,重寫compareTo(T o)方法。
    • 重寫方法時,一定要注意排序規則必須按照要求的主要條件和次要條件來寫。

    類轉換異常:學生類 不能 轉成 自然排序接口。?

    如果要做“自然排序”,需要讓類實現Comparable接口,重寫接口的compareTo()方法。

    字符串本身,可以進行比較排序。

    10_比較器排序Comparator的使用

    3.9、比較器排序Comparator的使用

    案例需求

    • 存儲學生對象并遍歷,創建TreeSet集合使用帶參構造方法。
    • 要求:按照年齡從小到大排序,年齡相同時,按照姓名的字母順序排序。

    實現步驟(結論)

    • 用TreeSet集合存儲自定義對象,帶參構造方法使用的是比較器排序對元素進行排序的。
    • 比較器排序,就是讓集合構造方法接收Comparator的實現類對象,重寫compare(T o1,T o2)方法。
    • 重寫方法時,一定要注意排序規則必須按照要求的主要條件和次要條件來寫。

    第3個構造方法:需要 接口的實現類對象。匿名內部類方式,較為簡單。

    11_成績排序

    案例:成績排序

    1、比較器排序Comparator

    2、自然排序Comparable

    12_不重復的隨機數

    案例:不重復的隨機數

    13_泛型概述和好處

    4.1、泛型概述

    泛型概述

    是JDK5中引入的特性,它提供了編譯時類型安全檢測機制,該機制允許在編譯時檢測到非法的類型。

    它的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。

    一提到參數,最熟悉的就是定義方法時有形參,然后調用此方法時傳遞實參。那么參數化類型怎么理解呢?顧名思義,就是將類型由原來的具體的類型參數化,然后在使用/調用時傳入具體的類型。這種參數類型可以用在類、方法和接口中,分別被稱為泛型類、泛型方法、泛型接口。

    泛型定義格式:

    • <類型>:指定一種類型的格式。這里的類型可以看成是形參。
    • <類型1, 類型2, ...>:指定多種類型的格式,多種類型之間用逗號隔開。這里的類型可以看成是形參。
    • 將來具體調用時候給定的類型可以看成是實參,并且實參的類型只能是引用數據類型。

    泛型的好處

    • 把運行時期的問題提前到了編譯期間。
    • 避免了強制類型轉換。?

    當沒有指定集合中元素類型的時候,默認是Object類型:因為 泛型默認是引用類型,Object可以代表所有的引用類型。

    14_泛型類

    4.2、泛型類

    15_泛型方法

    4.3、泛型方法

    方法名相同,參數列表不同:方法重載!

    方法調用,需要相對應,過于麻煩。--> 使用“泛型類”進行改進,只需要一個方法。

    調用方法,需要明確數據類型,過于麻煩。--> 創建對象的時候,不明確數據類型,在調用方法的時候,明確數據類型。

    泛型方法:接收任意泛型的數據類型。

    16_泛型接口

    4.4、泛型接口

    接口不能直接實例化。

    參照ArrayList類(泛型類):

    17_類型通配符

    4.5、類型通配符

    18_可變參數

    4.6、可變參數

    19_可變參數的使用

    4.7、可變參數的使用

    Arrays工具類中有一個靜態方法:

    • public static <T> List<T> asList?(T... a)【public static List asList(T... a)】:返回由指定數組支持的固定大小的列表
    • 返回的集合不能做增刪操作,可以做修改操作

    ?List接口中有一個靜態方法:

    • public static List of(E... elements)【public static <E> List<E> of?(E... elements)】:返回包含任意數量元素的不可變列表
    • 返回的集合不能做增刪改操作

    Set接口中有一個靜態方法:

    • public static Set of(E... elements)【public static <E> Set<E> of?(E... elements)】:返回一個包含任意數量元素的不可變集合
    • 在給元素的時候,不能給重復的元素
    • 返回的集合不能做增刪操作,沒有修改的方法

    1、public static <T> List<T> asList?(T... a)

    2、public static <E> List<E> of?(E... elements)

    3、public static <E> Set<E> of?(E... elements)

    set無帶索引的方法。

    總結

    以上是生活随笔為你收集整理的Java15-day06【Set、HashSet、LinkedHashSet、TreeSet、Comparable、Comparator、泛型类、可变参数的使用】的全部內容,希望文章能夠幫你解決所遇到的問題。

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