Java 中 Comparable 和 Comparator复习

本文介绍了Java中Comparable接口和Comparator接口的使用,重点讲解了如何自定义比较器进行对象属性的定制化排序。同时提到了适用于不同阶段Java开发者的学习资源,包括从入门到进阶的全面学习资料。
摘要由CSDN通过智能技术生成

}

}

测试

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开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值