比较器的 java_Java中常见的比较器的实现方法

本文介绍了在Java中如何对对象数组进行排序,主要涉及覆写Object的equals方法、实现Comparable接口的compareTo方法以及定义Comparator比较器。通过具体的BookCook和Student类示例,详细解释了每种方法的使用场景和实现过程,展示了如何根据需求选择合适的对象比较策略。
摘要由CSDN通过智能技术生成

在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。

通常对象之间的比较可以从两个方面去看:

第一个方面:对象的地址是否一样,也就是是否引用自同一个对象。这种方式可以直接使用“==“来完成。

第二个方面:以对象的某一个属性的角度去比较。

对于JDK8而言,有三种实现对象比较的方法:

1、覆写Object类的equals()方法;

2、继承Comparable接口,并实现compareTo()方法;

3、定义一个单独的对象比较器,继承自Comparator接口,实现compare()方法。

由于使用的排序方式的不同,具体选择哪种方法来实现对象的比较也会有所不同。

第一种方法比较便于理解,复写equals()方法一般用于自己实现的对象数组排序,而对于在应用Java内置的排序算法时,使用后两种方式都是可以实现的。

先来看一下第二种方式,这种方式就是让自己编写的类继承Comparable接口,并实现接口的compareTo()方法,这种情况下,在使用java.util.Arrays.sort()方法时不用指定具体的比较器,sort()方法会使用对象自己的比较函数对对象进行排序。具体实例代码如下:

1 import java.util.Arrays;

2

3 class BookCook implements Comparable{

4 private String title;

5 private double price;

6 public BookCook(String title,double price){

7 this.title = title;

8 this.price = price;

9 }

10 @Override

11 public String toString() {

12 return "书名:"+this.title+",价格:"+this.price;

13 }

14 @Override

15 public int compareTo(BookCook o) {

16 if(this.price > o.price){

17 return 1;

18 }else if(this.price < o.price){

19 return -1;

20 }else{

21 return 0;

22 }

23 }

24 }

从JDK1.8开始出现了Comparator接口,它的出现解决了当需要在已经开发好的代码基础上完善对象的比较功能时不想更改之前的代码的问题。这种情况,我们需要单独定义一个对象比较器,继承Comparator接口。具体实现代码如下:

1 class Student {

2 private String name;

3 private double score;

4 public Student(String name,double score){

5 this.name = name;

6 this.score = score;

7 }

8 public double getScore(){

9 return this.score;

10 }

11 @Override

12 public String toString() {

13 return "姓名:"+this.name+",分数:"+this.score;

14 }

15

16 }

17 class StudentComparator implements Comparator {

18 @Override

19 public int compare(Student o1,Student o2) {

20 if(o1.getScore() > o2.getScore()){

21 return 1;

22 }else if(o1.getScore() < o2.getScore()){

23 return -1;

24 }else{

25 return 0;

26 }

27 }

28 }

29 public class TestComparator {

30

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

32

33 Student[] sts = new Student[]{

34 new Student("小戴",60),

35 new Student("小王",90),

36 new Student("老王",80),

37 new Student("小萱",95)

38 };

39

40 java.util.Arrays.sort(sts, new StudentComparator());

41 System.out.println(java.util.Arrays.toString(sts));

42 }

43 }

以上三种情况,因具体情况的不同,选择不同的方法解决实际的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值