TreeSet中的比較器問題
阿新 • • 發佈:2022-03-25
TreeSet的比較器只有在泛型型別為系統定義好的資料型別時,才有給定的比較器,且預設為升序,其餘情況均要通過處理。
1.TreeSet的降序排序實現:
此時需要我們重寫Comparator的介面
程式碼實現:
1 public static void TreeSetDesc()//實現降序 2 { 3 TreeSet<Integer> set = new TreeSet<Integer>(new Comparator<Integer>() {//設定自定義的比較器 4 public int compare(Integer o1,Integer o2)//改變compare函式來改變比較器的比較規則 5 { 6 return -(o1 - o2); 7 } 8 } 9 ); 10 11 set.add(234); 12 set.add(588); 13 set.add(30); 14 15 System.out.println(set); 16 }
2.TreeSet的自定義類的排序實現
(1).法一:重寫比較器(和上述程式碼類似)
1 public static void TreeSetPerson() 2 { 3 TreeSet<Person> set = new TreeSet<>(new Comparator<Person>() { 4 public int compare(Person p1,Person p2) 5 { 6 return p1.getAge() - p2.getAge(); 7 } 8 }); 9set.add(new Person("張三",40)); 10 set.add(new Person("李四",30)); 11 set.add(new Person("王五",50)); 12 System.out.println(set); 13 }
(2).法二:在類中定義比較的方式
類中定義比較方式程式碼:
1 public class Person implements Comparable<Person>{//引入比較器介面 2 //定義比較函式 3 public int compareTo(Person p) {//此處比較兩個量,一個量是p,另一個量是自身this 4 return this.age - p.age; 5 } 6 }
然後就可以把類當作普通的Integer等型別進行操作即可
1 public static void TreeSetPerson() 2 { 3 TreeSet<Person> set = new TreeSet<>(); 4 set.add(new Person("張三",40)); 5 set.add(new Person("李四",30)); 6 set.add(new Person("王五",50)); 7 System.out.println(set); 8 }