第一講 TreeSet程序員
一、 概述安全
TreeSet能夠對Set集合中的元素進行排序,按照天然順序排。數據結構
二、 演示代碼框架
輸出結果:函數
總結:TreeSet會對元素進行天然排序,大寫排在小寫前面。3d
第二講 TreeSet存儲自定義對象對象
一、 概述:blog
將自定義對象存儲到TreeSet集合中。排序
二、 思路:接口
自定義學生類,並將學生對象存儲到TreeSet中,在存儲過程當中按照年齡排序。
三、 練習:往TreeSet集合中存儲自定義對象(學生),並按照學生年齡進行排序
小結:
自定義對象須要重寫Comparable接口中的compareTo()方法:由於TreeSet是有序的,在添加元素時,會將新的元素與TreeSet中已有元素進行比較,調用Comparable接口中的compareTo()方法。自定義對象須要定義本身的比較原則,因此要重寫Comparable接口中的compareTo()方法。
第三講 二叉樹
一、 概述:
TreeSet的底層數據結構是二叉樹,能夠對Set集合中的元素進行排序。其保證元素惟一性的依據是:compareTo()方法,若是返回0,則元素重複,元素不添加到集合中。
二、 TreeSet排序
第一種排序方式:讓元素自身具有比較性,所以,元素須要實現Comarable接口,覆蓋compareTo方法。
第四講 實現Comparator方式排序
一、 概述:TreeSet的第二種排序方式
當元素自身不具有比較性時,或者具有的比較性不是所須要的,這時就須要讓集合自身具有比較性——讓集合在初始化時,就有了比較方法
二、 第二種排序方法實現思路
定義一個類,實現Comparator接口,並覆蓋接口中的compare方法。以第二講中學生爲例:學生元素自身帶有了按年齡排序的方法,但咱們的集合須要進行姓名排序,若是要修改學生中的代碼比較麻煩,咱們能夠定義的一個類封裝按姓名排序的方法,並將該類對象提供給TreeSet使用。
三、 實現代碼以下:
練習:按字符串長度排序
思路:字符串本省具有比較性,可是它的比較方法不是所需的,這時就只能使用比較器。
實現代碼以下:
小結:任何對象均可以根據實際要求進行排序,自定排序器並將排序器對象傳給集合使用,這種方法比較方便。在比較字符串時,能夠直接調用String類中的方法compareTo進行字符串天然排序。
第六講 泛型概述
一、 定義
泛型:JDK1.5版本之後出現的新特性。用於解決類型安全問題,是一個類型安全機制。
二、 好處
1) 將運行時期出現的問題ClassCastException,轉移到了編譯時期,方便程序員解決問題,讓運行時問題減小,更安全。
2) 避免了讀取元素時強制類型轉換的麻煩;
三、 代碼實現
第七講 泛型使用
一、 泛型在比較器中的應用
泛型格式:經過<>來定義要操做的引用數據類型。
使用泛型的狀況:泛型的時候使用在集合框架中很常見,只要見到<>就要定義泛型(API文檔中的接口、類、方法等有<>標識的,在使用它們的時候就須要定義泛型)。
<>標誌符:用來接收類型,當使用集合時,將集合中要存儲的數據類型做爲參數傳遞到<>中便可。
二、 代碼實現
第八講 泛型類
一、 定義
定義泛型類的狀況:當類中要操做的引用數據類型不肯定時,早期的作法是:定義Object來完成擴展。有了泛型以後:能夠定義泛型類來完成擴展。
二、 代碼實現
第九講 泛型方法
一、 概述
爲了讓不一樣方法能夠操做不一樣類型,並且類型不肯定,能夠將泛型定義在方法上。定了泛型的方法就是泛型方法。
二、 代碼示例
三、 泛型函數特殊之處
靜態方法不能夠訪問類上定義的泛型。若是靜態方法操做的應用數據類型不肯定,能夠將泛型定義在方法上。
第十講 泛型接口
實現泛型接口的類,也不肯定要處理的數據類型,此時能夠將此類定義成泛型。
第十一講 泛型限定
一、 定義
限定泛型可接收的類型,有「上限定」和「下限定」兩種。
1)? extends E :能夠接收E類型或這E的字類型,上限定;
2)? super E:能夠接收E類型或者E的父類型,下限定;
二、 泛型限定應用
「?」——通配符,也即佔位符。
以下代碼:利用泛型上限(Person及其子類)定義了一個函數,並用子類(Student)對象調用該函數。
說明:Student和Worker都是Person的子類。用Person類定義了比較器,存儲了Student和Worker類型的TreeSet均可以調用該比較器,這體現了泛型下限的特性。
知識點總結
知識點總結
一、 在給TreeSet集合定義比較器時,須要實現Comparator接口中的compare(Object o1,Object o2)方法,若要使得倒序存儲,只需將實現比較代碼中的o1和o2這兩個參數兌換位置。
二、 TreeSet集合中元素的兩種排序方法:
1) 定義在元素內部
實Comparable接口中的CompareTo方法。
2) 自定義比較器
實現Comparator接口中的compare方法,並將比較器對象傳給集合。
注意:當二者同時存在時,「自定義比較器」優先。
三、 重寫equals方法時,不能賦泛型,所以,須要進行強制類型轉換後才能使用equals方法。
四、 泛型類的做用:避免了強轉,並使類型轉換錯誤發生在編譯時期,方便修改。
五、 泛型方法能夠提升程序功能的擴展性,使得函數更加通用。
六、 自定義泛型類:只能是自定義的數據類型,不能是基本數據類型。
七、 靜態方法不能夠訪問類上定義的泛型,緣由是: