java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别

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

1、在需要比较的对象类中覆写Object类的equals()方法;

2、需要比较的类继承Comparable接口,然后在其类内部实现compareTo()方法;

3、抛去需要被比较的类,在其外部自定义一个单独的对象比较器,继承自Comparator接口,实现compare()方法。

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

第一种方法比较便于理解,复写equals()方法一般用于自己实现的对象数组排序,已经在我们上一篇文章

2.内部比较器Compareable的用法

这种方式就是让自己编写的类继承Comparable接口,并实现接口的compareTo()方法,这种情况下,在使用java.util.Arrays.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 }

在写代码时要注意两点:

(1)时刻要统一比较对象,在这里就是BookCook

(2)在重写的compareTo()方法中,需要特别注意的是,返回值的正负始终与this待比较对象保证同步,即当this值比指定对象大时,就返回正数1,小于时就返回负数-1,相等时就返回0.

3.外部比较器Comparator的用法

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

以学生成绩为例,具体实现代码如下:

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 //当需要比较功能时,需要在待比较对象后new一个自定义的比较器,以便其按照自定义比较器中的规则进行比较。

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

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

42 }

43 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaComparator是一个接口,它定义了一个用于比较两个对象的方法compare(Object o1, Object o2)。Comparator接口通常用于对集合的元素进行排序。 Comparator接口compare方法返回一个int值,表示两个对象的相对顺序。如果第一个对象小于第二个对象,则返回负数;如果第一个对象等于第二个对象,则返回0;如果第一个对象大于第二个对象,则返回正数。 Comparator接口的实现可以使用匿名内部、Lambda表达式或单独的来创建。在比较两个对象时,可以使用任何属性或方法来定义它们之间的关系。 下面是一个使用Comparator接口对字符串进行排序的例子: ``` List<String> strings = Arrays.asList("apple", "orange", "banana", "pear"); Collections.sort(strings, new Comparator<String>() { public int compare(String s1, String s2) { return s1.compareTo(s2); } }); ``` 这个例子,我们创建了一个字符串列表,并使用Collections.sort方法将其排序。我们使用了一个匿名内部来实现Comparator接口,将字符串按字典序排序。 在Java比较器的顺序是根据返回值来确定的。如果compare方法返回负数,则第一个对象在第二个对象之前;如果compare方法返回正数,则第一个对象在第二个对象之后;如果compare方法返回0,则两个对象相等,它们的相对位置不变。 比较器的实现通常需要考虑到多个因素,例如按照价格排序时可能需要同时考虑产品的名称、品牌、型号等因素。在这种情况下,我们可以使用Java 8引入的多字段排序方法,或者创建一个自定义比较器来实现排序。 总之,ComparatorJava非常重要的一个接口,它提供了一种灵活的方法来对集合的对象进行排序。熟练掌握Comparator接口的使用方法可以让我们更好地处理集合数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值