java中的比较器

简介: java中的比较器

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

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

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

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


有两种方法:


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

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


编写的类继承Comparable接口,并实现compareTo()方法,


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;
    }
  }
}

要在已经开发好的代码的基础上完善对象的比较功能时,又不想更改之前的代码,这种情况下,从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));
  }
}

新创建一个公众号 Rockey小何同学 想相互交流的同学可以关注一下哈! 感谢支持!

相关文章
|
6月前
|
Java
【JAVA学习之路 | 提高篇】Java比较器(comparable) &&(comparator)
【JAVA学习之路 | 提高篇】Java比较器(comparable) &&(comparator)
|
6月前
|
Java
【Java】通过Comparator比较器的方式给对象数组排序
【Java】通过Comparator比较器的方式给对象数组排序
53 0
|
6月前
|
Java
Java中的比较器Comparable与Comparator
Java中的比较器Comparable与Comparator
|
6月前
|
算法 搜索推荐 Java
数据结构与算法__冒泡排序__Java外比较器和内比较器(排序专题)
数据结构与算法__冒泡排序__Java外比较器和内比较器(排序专题)
59 0
|
存储 算法 安全
Java集合之Set概述及内外比较器详解
Java集合之Set概述及内外比较器详解
125 1
|
6月前
|
存储 Java
Java中比较器Comparator的使用
Java中比较器Comparator的使用
53 0
|
Java
Java比较器
Java比较器
60 0
|
安全 Java 数据库连接
Java常用类库中(ThreadLocal、Comparable比较器、AutoCloseable、Optional空处理)附带相关面试题
1.ThreadLocal线程独立,2.Comparable比较器与Comparetor,3.AutoCloseable接口,4.Optional空处理
60 0
Java-比较器升降序问题
Java-比较器升降序问题 当我们在使用Java的排序函数时,时常需要自己的需求自定义一个比较器来作为排序的依据 而设置的比较器的升序和降序问题是如何决定的呢?
Java基础进阶集合-Comparable接口,Comparator比较器案例
Java基础进阶集合-Comparable接口,Comparator比较器案例
Java基础进阶集合-Comparable接口,Comparator比较器案例