1. 程式人生 > 其它 >TreeSet中的比較器問題

TreeSet中的比較器問題

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         });
 9
set.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     }