源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-10-11 18:50 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅谈Java中几种常见的比较器的实现方法
在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。 [b]通常对象之间的比较可以从两个方面去看:[/b] 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象。这种方式可以直接使用“==“来完成。 第二个方面:以对象的某一个属性的角度去比较。 [b]从最新的JDK8而言,有三种实现对象比较的方法:[/b] [b]一、覆写Object类的equals()方法;[/b] [b]二、继承Comparable接口,并实现compareTo()方法;[/b] [b]三、定义一个单独的对象比较器,继承自Comparator接口,实现compare()方法。[/b] 由于使用的排序方式的不同,具体选择哪种方法来实现对象的比较也会有所不同。 覆写equals()方法,一般用于自己实现对象数组排序的情况,而对于要使用java内置的排序算法时,使用后面两种方式都是可行的。 先来看第二种方式,这种方式就是让自己编写的类继承Comparable接口,并实现compareTo()方法,这种情况下,在使用java.util.Arrays.sort() 方法时,不用指定具体的比较器,sort()方法会使用对象自己的比较函数来完成对象的排序。 [b]下面是一个具体的例子:[/b]
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中几种常见的比较器的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部