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     }

 

posted @ 2022-03-25 20:56  jue1e0  阅读(106)  评论(0)    收藏  举报