TreeSet新增自定義元素(比較)
TreeSet新增自定義元素:
1. 往TreeSet集合中新增元素的時候,如果元素本身具備了自然順序的特徵,那麼就按照自然排序的順序新增
2. 新增自定義元素,這些元素沒有一個自然順序,這裡新增不進入,我們就可以來提供一個當前類的一種比較規則
,要【遵從】Comparable介面,實現compareTo(T o)方法
3. 如果比較元素的時候,compareTo方法返回的是0,表示這個兩個元素是一樣的,那麼這裡不允許新增,認為
是重複元素 (TreeSet和hashCode、equals方法沒有任何關係)
4. 除了要求元素有自然順序,或者顯示Comparable介面之外,還有一種實現的方式,在建立TreeSet的時候
傳入引數是一個自定義的比較器,這個比較器要求【遵從】Comparator介面
如何建立自定義比較器:
class 類名 implements Comparator {
public compare(Object o1 , Object o2) {
}
}
【注意】
一個自定義類【遵從】了Comparable介面,實現了compareTo方法,如果這裡又給TreeSet提供了一個比較器
這個自定義比較器是【遵從】Comparator介面,實現了compare方法,同時存在的情況下,TreeSet預設
使用的比較規則是【自定義比較器】規則
【下面附上程式碼便於理解】
class Worker implements Comparable<Worker> {
int id;
String name;
int salary;
public Worker(int id, String name, int salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
@Override
public String toString() {
return "ID:" + this.id + "name:" + this.name + "salary:" + this.salary;
}
//第一種:
public int compareTo(Worker o) {
// 返回值有三種,0 負整數 正整數
// 當前自定義類,我們通過薪水類比較,0 表示一樣 負數表示小於 整數表示大於
return this.salary-o.salary;
}
}
//2.第二種:自定義一個比較器
class MyComparator implements Comparator<Worker>{
public int compare(Worker o1, Worker o2) {
return o1.salary-o2.salary;
}
}
public class TestTreeSetCompare {
public static void main(String[] args) {
MyComparator mc=new MyComparator();
TreeSet<Worker> ts = new TreeSet<Worker>(mc);
ts.add(new Worker(1,"smile",200));
ts.add(new Worker(2,"book",250));
ts.add(new Worker(3,"pencil",250));
System.out.println(ts);
ts.add(new Worker(1,"smile",20));
System.out.println(ts);
}
}