}
}
测试
public static void main(String[] args) {
Student student1 = new Student(“zhangsan”, 1, 80);
Student student2 = new Student(“lisi”, 3, 90);
Student student3 = new Student(“wangwu”, 2, 100);
List list = new ArrayList<>();
list.add(student1);
list.add(student2);
list.add(student3);
Collections.sort(list);
list.stream().forEach(n -> System.out.println(n.toString()));
}
结果
Student{name=‘lisi’, age=3, score=90}
Student{name=‘wangwu’, age=2, score=100}
Student{name=‘zhangsan’, age=1, score=80}
从上面的例子我们大致了解了Comparable接口的使用,也就是说同一个类的对象之间如果要进行比较,需要实现Comparable接口,并且实现compareTo方法。这样比较的时候就会按照这个规则来进行比较。
再来看一下Comparator的例子,定义实体类Student
public class Student {
private String name;
private Integer age;
private Integer score;
public Student(String name, Integer age, Integer score) {
this.name = name;
this.age = age;
this.score = score;
}
}
自定义比较器:
class AgeComparator implements Comparator {
@Override
public int compare(Student o1, Student o2) {
if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o1.getAge() < o2.getAge()) {
return -1;
} else {
return 0;
}
}
}
class NameComparator implements Comparator {
@Override
public int compare(Student o1, Student o2) {
return o1.getName().compareTo(o2.getName());
}
}
测试
public static void main(String[] args) {
Student student1 = new Student(“zhangsan”, 1, 80);
Student student2 = new Student(“lisi”, 3, 90);
Student student3 = new Student(“wangwu”, 2, 100);
List list = new ArrayList<>();
list.add(student1);
list.add(student2);
list.add(student3);
// 这时候如果直接 Collections.sort(list) 会由于Student没有默认的自然排序,编译不过。
Collections.sort(list, new AgeComparator());
list.stream().forEach(n -> System.out.println(n.toString()));
System.out.println(“\n-------------------”);
Collections.sort(list, new NameComparator());
list.stream().forEach(n -> System.out.println(n.toString()));
}
可以看到,我们如果要对实体类的对象进行比较,在不修改原实体类的情况下,可以通过实现多个Comparator来实现多个比较规则。通过Comparator,我们可以自定义比较规则,针对对象的属性或者字段等来进行比较,而Comparable就实现不了,因为它的compareTo方法只能有一种比较规则。
实现Comparator,同样也要实现它的一个方法compare。由于一般情况下我们实现的Comparator只有一个compare方法,所以我们可以对实现类进行一些优化:
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!