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-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集合的特點
HashSet集合練習:HashSet集合的基本使用---存儲字符串并遍歷
04_HashSet集合保證元素唯一性源碼分析
3.4、HashSet集合保證元素唯一性源碼分析
HashSet集合添加一個元素的過程(HashSet集合保證元素唯一性的圖解):
HashSet集合保證元素唯一性的原理
?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集合特點
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、泛型类、可变参数的使用】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MOOC数学建模与实验---学习笔记--
- 下一篇: Java16-day07【Map(概述、