比较器Comparable与Comparator实践

太过爱你忘了你带给我的痛 2022-07-14 09:56 250阅读 0赞

比较器Comparable与Comparator实践

Comparable:该比较器是用于对象的内部比较,比较的是属性。它的方法:

  1. public int compareTo(T o);

Comparator:该比较器用于对象的外部比较,比较的是对象,一般这个比较的对象也实现了Comparable接口。Comparator的方法有多个,但一般我们只需要实现:

  1. int compare(T o1, T o2);

实例代码:

声明一个People类,实现Comparable接口,内部排序优先级,city>age>name>sex。

  1. public class People implements Comparable<People> {
  2. public String name;
  3. public int sex;
  4. public String city;
  5. public int age;
  6. public People(String name, int sex, String city, int age) {
  7. this.name = name;
  8. this.sex = sex;
  9. this.city = city;
  10. this.age = age;
  11. }
  12. @Override
  13. public String toString() {
  14. return "People{" +
  15. "name='" + name + '\'' +
  16. ", sex=" + sex +
  17. ", city='" + city + '\'' +
  18. ", age=" + age +
  19. '}';
  20. }
  21. /** * 比较规则优先级:city>age>name>sex */
  22. @Override
  23. public int compareTo(People people) {
  24. int result = 0;
  25. if (people == null) return result;
  26. //比较city
  27. result = people.city.compareTo(city);//String实现了Comparable接口
  28. if (result == 0) {
  29. //city 相同
  30. result = people.age - age;//比较age
  31. }
  32. if (result == 0) {
  33. // age相同
  34. result = people.name.compareTo(name);//比较name
  35. }
  36. if (result == 0) { //name相同
  37. result = people.sex - sex;//比较sex
  38. }
  39. return result;
  40. }
  41. }

实现一个Comparator比较器

  1. public class PeopleComparator implements Comparator<People> {
  2. @Override
  3. public int compare(People people1, People people2) {
  4. if (people1 != null && people2 != null) {
  5. return people2.compareTo(people1);//后者和前者比较
  6. }
  7. return 0;
  8. }
  9. }

测试代码实现:

  1. public class Test {
  2. public static void main(String[] args) {
  3. List<People> list = new ArrayList<>();
  4. list.add(new People("moly", 1, "shanghai", 24));
  5. list.add(new People("lili", 1, "beijing", 25));
  6. list.add(new People("pop", 1, "shenzhen", 24));
  7. list.add(new People("momo", 0, "shanghai", 23
  8. ));
  9. System.out.println(list.toString());
  10. Collections.sort(list,new PeopleComparator());
  11. System.out.println(list.toString());
  12. }
  13. }

打印结果:

  1. sort before:[People{name='moly', sex=1, city='shanghai', age=24}, People{name='lili', sex=1, city='beijing', age=25}, People{name='pop', sex=1, city='shenzhen', age=24}, People{name='momo', sex=0, city='shanghai', age=23}]
  2. sort after:[People{name='lili', sex=1, city='beijing', age=25}, People{name='momo', sex=0, city='shanghai', age=23}, People{name='moly', sex=1, city='shanghai', age=24}, People{name='pop', sex=1, city='shenzhen', age=24}]

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java比较-Comparable

    在Java中经常会涉及到对象数组的排序问题,就会涉及到对象之间的比较问题。 Java实现对象排序的方式有两种: 自然排序:Comparable 定制排序:Com

    相关 比较 Comparator

    比起Comparable接口比较器Comparator为我们在排序中提供了更宽松和更加广泛的应用实例:在实际中,常常需要对一个商品按照不同属性来排序,这时我们就能通过写出自己的