淺談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;
}
}
}
一般我們使用以上兩種方法就能夠滿足實際的開發(fā)問題。但是當出現以下情況時,就需要用到Comparator接口:
要在已經開發(fā)好的代碼的基礎上完善對象的比較功能時,又不想更改之前的代碼,這種情況下,從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中幾種常見的比較器的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
System.getProperty(user.dir)定位問題解析
System.getProperty(user.dir) 獲取的是啟動項目的容器位置,用IDEA是項目的根目錄,部署在tomcat上是tomcat的啟動路徑,即tomcat/bin的位置,這篇文章主要介紹了System.getProperty(user.dir)定位問題,需要的朋友可以參考下2023-05-05
Java Spring開發(fā)環(huán)境搭建及簡單入門示例教程
這篇文章主要介紹了Java Spring開發(fā)環(huán)境搭建及簡單入門示例,結合實例形式分析了spring環(huán)境搭建、配置、使用方法及相關注意事項,需要的朋友可以參考下2017-11-11
SpringBoot中使用spring-retry 解決失敗重試調用
本文主要介紹了SpringBoot中使用spring-retry 解決失敗重試調用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07

