gpt4 book ai didi

浅谈Java中几种常见的比较器的实现方法

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅谈Java中几种常见的比较器的实现方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

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

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

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

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

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

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

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

覆写equals()方法,一般用于自己实现对象数组排序的情况,而对于要使用java内置的排序算法时,使用后面两种方式都是可行的.

先来看第二种方式,这种方式就是让自己编写的类继承Comparable接口,并实现compareTo()方法,这种情况下,在使用java.util.Arrays.sort() 。

方法时,不用指定具体的比较器,sort()方法会使用对象自己的比较函数来完成对象的排序.

下面是一个具体的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Arrays;
 
class BookCook implements Comparable< BookCook >{
     private String title;
     private double price;
     public BookCook(String title,double price){
         this.title = title;
         this.price = price;
     }
     @Override
     public String toString() {
         return "书名:"+this.title+",价格:"+this.price;
     }
     @Override
     public int compareTo(BookCook o) {
         if(this.price > o.price){
             return 1;
         }else if(this.price < o.price){
             return -1;
         }else{
             return 0;
         }
     }
}

一般我们使用以上两种方法就能够满足实际的开发问题。但是当出现以下情况时,就需要用到Comparator接口:

要在已经开发好的代码的基础上完善对象的比较功能时,又不想更改之前的代码,这种情况下,从JDK1.8之后出现了Comparator接口,是对这种情况的一个弥补.

这种情况下,我们需要单独定义一个对象比较器,继承Comparator接口,并实现compare()方法。示例代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Student {
     private String name;
     private double score;
     public Student(String name,double score){
         this.name = name;
         this.score = score;
     }
     public double getScore(){
         return this.score;
     }
     @Override
     public String toString() {
         return "姓名:"+this.name+",分数:"+this.score;
     }
    
}
class StudentComparator implements Comparator< Student > {
     @Override
     public int compare(Student o1,Student o2) {
         if(o1.getScore() > o2.getScore()){
             return 1;
         }else if(o1.getScore() < o2.getScore()){
             return -1;
         }else{
             return 0;
         }
     }
}
public class TestComparator {
 
     public static void main(String[] args) {
        
         Student[] sts = new Student[]{
                 new Student("小戴",60),
                 new Student("小王",90),
                 new Student("老王",80),
                 new Student("小萱",95)
         };
        
         java.util.Arrays.sort(sts, new StudentComparator());
         System.out.println(java.util.Arrays.toString(sts));
     }
}

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

这篇浅谈Java中几种常见的比较器的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:http://blog.csdn.net/danmoqianhua/article/details/50557809 。

最后此篇关于浅谈Java中几种常见的比较器的实现方法的文章就讲到这里了,如果你想了解更多关于浅谈Java中几种常见的比较器的实现方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com