Java比较器描述
来源:互联网 发布:c语言调用windows api 编辑:程序博客网 时间:2024/06/05 21:02
Java中几种常见的比较器的实现方式
在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比较器描述
- java vs c比较的经典描述
- java vs c比较的经典描述
- 比较描述子
- 【VHDL】常见触发器/锁存器/比较器/计数器的VHDL描述
- ldap比较好的描述
- 特征描述符的比较
- 数据结构 JAVA描述(三) 队列 + 栈与队列的比较
- java 比较器
- java比较器Comparator
- JAVA 比较器
- java比较器(1)
- java比较器(2)
- java比较器(3)
- java-----集合比较器
- JAVA实现比较器
- java中的比较器
- Java自学--比较器
- javaSE 构造方法
- bzoj1008: [HNOI2008]越狱(快速幂)
- 中国古代史
- loadrunner Web_类函数之web_radio_group()
- MYSQL (三)
- Java比较器描述
- C++头文件和源文件的关系以及makefile文件
- 前缀式的计算
- MySQL——根据某时间点查询其前后数据记录并正序输出到TXT文件
- Algorithms(二)Maximum Subarray
- std:map与迭代器简析
- Netty心跳检测篇之IdleStateHandler
- tensorflow使用中遇到的问题
- Spring_5 声明式事物