示範TreeSet對String是可排序的
TreeSet無法對自定義類型進行排序
比較規則怎麼寫
自平衡二叉樹結構
實作比較器接口
Collections工具類
1.TreeMap集合底層實際上是一個TreeMap
2.TreeMap集合底層是一個二叉樹
3.放到TreeSet集合中的元素,等同于放到TreeMap集合key部分了
4.TreeSet集合中的元素,無序不可重複,但是可以按照元素的大小順序自動排序
稱為:可排序集合
例如:編寫程式從資料庫中取出資料,在頁面展示使用者資訊的時候按照生日升序或者降序,
這個時候可以使用TreeSet集合,因為TreeSet集合放進去,拿出來就是有序的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

TreeSet可以對自定義類型進行排序?
以下程式中,對于Person類來說,無法排序,因為沒有指定Person對象之間的比較規則。誰大誰小并沒有說明。
24
25
26
27
28
29
30
出現這個錯誤的原因是
Person類沒有實作java.lang,Comparable接口
//放在TreeSet集合中的元素需要實作java.lang.Comparable接口
//并且實作compareTo方法,equals可以不寫
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//需要在這個方法中編寫比較的邏輯,或者說比較的規則,按照什麼進行比較。
//k.compareTo(t.key)
//拿着參數k和集合中的每個k進行比較,傳回值可能是>0,<0,=0
//比較規則最終還是程式員實作的:例如按照年齡升序,或者按照年齡降序
先按照年齡升序,如果年齡一樣的再按照姓名升序
1.自平衡二叉樹,遵循左小右大的原則存放
2.周遊二叉樹的時候有三種方式
前序周遊:根左右
中序周遊:左根右
後序周遊:左右根
注意:前中後說的是根的位置
3.TreeSet集合和TreeMap集合采用的是中序周遊方式,即左根右。他們是自平衡二叉樹
100 200 50 60 80 120 140 130 135 180 666
TreeSet集合中元素可排序的第二種方式,使用比較器的方式
我們可以使用匿名内部類的方式
可以使用匿名内部類的方式(這個類沒有名字,直接new接口)
最終的結論,放在TreeSet或者TreeMap集合key部分的元素要想做到排序,包括兩種方式
第一種:放在集合中的元素實作java.lang.Comparable接口
第二種:在構造TreeSet或者TreeMap集合的時候給它傳一個比較器對象。
Comparable和Comparator怎麼選擇呢?
當比較規則不會發生改變的時候,或者說當比較規則隻有1個的時候,建議實作Comparable接口
如果比較規則有多個,并且需要多個比較規則之間頻繁切換,建議使用comparator接口
comparator接口的設計符合OCP原則。
java.util.Collections集合工具類,友善集合的操作
55
56
57
58
59
60
61
62