您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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中的比較器有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。