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

作者:danmoqianhua 时间:2022-04-08 19:04:36 

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

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

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

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

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

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

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

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

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

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

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

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

下面是一个具体的例子:


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()方法。示例代码如下:


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,比较器
0
投稿

猜你喜欢

  • Java实现二分查找算法实例分析

    2022-06-01 07:30:32
  • 通过JDK源码学习InputStream详解

    2022-09-10 19:50:29
  • 简单了解springboot的jar包部署步骤

    2021-07-02 14:22:48
  • Spring中使用atomikos+druid实现经典分布式事务的方法

    2023-07-14 00:46:17
  • java向下转型基础知识点及实例

    2022-07-01 11:48:38
  • 浅谈Maven的安装及修改为阿里云下载依赖

    2023-08-05 08:30:37
  • Java多线程-线程的同步与锁的问题

    2023-11-29 01:40:12
  • SpringBoot2学习之springboot与spring区别分析

    2023-02-22 17:44:28
  • Flutter加载图片的多样玩法汇总

    2023-08-24 09:48:22
  • java中javamail收发邮件实现方法

    2022-12-15 02:03:03
  • java 动态生成SQL的实例讲解

    2021-05-25 18:26:06
  • Spring Boot+Drools规则引擎整合详解

    2023-11-28 20:33:00
  • springboot整合mybatis-plus基于注解实现一对一(一对多)查询功能

    2021-06-16 13:08:29
  • Java中的Unsafe在安全领域的使用总结和复现(实例详解)

    2023-07-30 10:58:42
  • Java:泛型知识知多少

    2023-11-24 23:08:44
  • Java中的break和continue关键字的使用方法总结

    2022-07-13 11:50:46
  • springmvc后台基于@ModelAttribute获取表单提交的数据

    2023-08-05 12:29:35
  • 带你详细了解Java值传递和引用传递

    2023-02-19 08:42:26
  • springboot v2.0.3版本多数据源配置方法

    2023-07-27 06:37:57
  • java锁synchronized面试常问总结

    2023-08-01 05:11:37
  • asp之家 软件编程 m.aspxhome.com