Java集合之TreeSet

概述數據結構

TreeSet是SortedSet的實現類,能夠確保集合元素處於排序狀態(根據元素實際值的大小進行排序)ide

TreeSet採用紅黑樹的數據結構來存儲集合元素,且支持兩種排序方法:天然排序和定製排序,默認採用天然排序spa

經常使用方法對象

Object first()                                    返回第一個元素排序

Object last()                                     返回最後一個元素接口

Object lower(Object e)                    返回指定元素的前一個元素it

Object higher(Object e)                   返回指定元素的後一個元素ast

SortedSet subSet(Object fromElement Object toElement):            [fromElement,toElement)class

SortedSet headSet(Object toElement):                                            [                    ,toElement)容器

SortedSet tailSet(Object fromElement):                                           [fromElement,                )

Comparator comparator():若是TreeSet採用了定製排序,則返回定製排序所使用的Comparator.若是是採用天然排序,就返回null


天然排序:TreeSet調用集合元素的compareTo(Object obj)方法來比較元素之間的大小關係,而後將集合元素按升序排列

Java提供了一個Comparable接口,該接口定義了一個compareTo(Object obj)方法,該方法返回一個整數值,實現該接口的類必須實現該方法,實現了該接口的類的對象就能夠比較大小。

TreeSet中的元素應該是同一個類的對象

當把一個對象加入TreeSet集合時,TreeSet調用該對象的compareTo(Object obj)方法與容器中的其餘對象比較大小,而後根據紅黑樹結構找到它的存儲位置。

若是兩個對象經過compareTo(Object obj)比較相等,新對象將沒法添加到TreeSet集合中。

當須要把一個對象放入TreeSet中,重寫該對象對應類的equals()方法時,應保證該方法與compareTo(Object obj)方法有一致的結果。其規則是:若是兩個對象經過equals()方法比較返回true時,這兩個對象經過compareTo(Object obj)比較時應返回0

注:把一個對象添加到TreeSet時,該對象的類必須實現Comparable接口

定製排序:經過Comparator接口的幫助,實現定製排序。該接口裏包含了一個int compare(T o1,T o2)方法,用於比較o1和o2的大小

在建立TreeSet集合對象時,提供一個Comparator對象與TreeSet集合關聯,由該Comparator對象負責集合元素的排序邏輯

TreeSet ts = new TreeSet((o1,o2) -> 

{

    M m1 = (M)o1;

    M m2 = (M)o2;

    return m1.age > m2.age ? -1 : m1.age < m2.age ? 1:0

})

 注:M是一個自定義類,關鍵變量是age

相關文章
相關標籤/搜索