247 比较器Comparator的使用

247 比较器Comparator的使用

【需求】

存储学生对象并遍历,创建TreeSet集合,使用带参构造方法

要求,按照年龄从小到大排序,年龄相同的按姓名的字母顺序排列

-

Comparable是一个接口,要实现它需要先有一个实现类。在这里,采用匿名内部类的方式实现

1 package e247;

2

3 import java.util.Comparator;

4 import java.util.TreeSet;

5

6 public class TreeSetDemo {

7     public static void main(String[] args) {

8         TreeSet<Student247> seven = new TreeSet<Student247>(new Comparator<Student247>(){

9 //            在上面的括号里写匿名内部类,new一个Comparator,比较器借口的实现类对象

10 //            compare方法里的this代表TreeSetDemo类,而不是Student类

11 //            所以compare方法的参数传了2个Student对象

12 //            我们把圆括号里的o1,o2改成s1,s2

13 //            自然排序,用this.age - s.age实现

14 //            在这里,s1就是this,s2就是s

15             @Override

16             public int compare(Student247 s1, Student247 s2) {

17                 int num1 = s1.getAge() - s2.getAge();//这里用getAge不用this.age是因为

18 //                 这里无法使用其他类的private变量

19                 int num2 = num1==0?s1.getName().compareTo(s2.getName()) : num1;

20                 return num2;

21             }

22         });//注意!!!这里是下花括号、下圆括号、分号,上面这一堆都是在圆括号内的参数

23 //        <>尖括号里面是基本类型的包装类

24

25         Student247 s1 = new Student247("MOLE",26);

26         Student247 s2 = new Student247("RAT",24);

27         Student247 s3 = new Student247("TOAD",29);

28         Student247 s4 = new Student247("AVA",24);

29

30         seven.add(s1);

31         seven.add(s2);

32         seven.add(s3);

33         seven.add(s4);

34

35         System.out.println("---35---");

36         for (Student247 s:seven){

37             System.out.println(s.getName()+","+s.getAge());

38         }

39     }

40 }

--------OUTPUT--------

---37---

AVA,24

RAT,24

MOLE,26

TOAD,29

猜你喜欢

转载自blog.csdn.net/m0_63673788/article/details/121464321
今日推荐