黑馬程序員-Java基礎-集合框架-TreeSet、二叉樹、泛型

第一講 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方法。

四、  泛型類的做用:避免了強轉,並使類型轉換錯誤發生在編譯時期,方便修改。

五、  泛型方法能夠提升程序功能的擴展性,使得函數更加通用。

六、  自定義泛型類:只能是自定義的數據類型,不能是基本數據類型。

七、  靜態方法不能夠訪問類上定義的泛型,緣由是:

相關文章
相關標籤/搜索