Comparable介面的實現和使用
1.什麼是Comparable介面
此介面強行對實現它的每個類的物件進行整體排序。此排序被稱為該類的自然排序 ,類的 compareTo 方法被稱為它的自然比較方法 。實現此介面的物件列表(和陣列)可以通過 Collections.sort (和 Arrays.sort )進行自動排序。實現此介面的物件可以用作有序對映表中的鍵或有序集合中的元素,無需指定比較器。 強烈推薦(雖然不是必需的)使自然排序與 equals 一致。所謂與equals一致是指對於類 C 的每一個 e1 和 e2 來說,當且僅當 (e1.compareTo((Object)e2) == 0) 與e1.equals((Object)e2) 具有相同的布林值時,類 C 的自然排序才叫做與 equals 一致 。
2.實現什麼方法
int compareTo(T o) 比較此物件與指定物件的順序。如果該物件小於、等於或大於指定物件,則分別返回負整數、零或正整數。
強烈推薦 (x.compareTo(y)==0) == (x.equals(y)) 這種做法,但不是 嚴格要求這樣做。一般來說,任何實現 Comparable 介面和違背此條件的類都應該清楚地指出這一事實。推薦如此闡述:“注意:此類具有與 equals 不一致的自然排序。”
引數: o - 要比較的物件。 返回:
負整數、零或正整數,根據此物件是小於、等於還是大於指定物件。 丟擲:
ClassCastException - 如果指定物件的型別不允許它與此物件進行比較。
3.例項
import java.util.*;
public class EmployeeSortTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee[] staff = new Employee[ 3 ];
staff[ 0 ] = new Employee( "harry Hacker" , 35000 );
staff[ 1 ] = new Employee( "carl cracke" , 75000 );
staff[ 2 ] = new Employee( "tony Tester" , 38000 );
Arrays.sort(staff); //sort方法可以實現對物件陣列排序,但是必須實現 Comparable介面
/*Comparable介面原型為:
* public interface Comparable<T>
* {
* int compareTo(T other);//介面的中方法自動屬於public方法
* }
*/
for (Employee e: staff)
System.out.println( "id=" +e.getId()+ " name=" +e.getName()+
".salary=" +e.getSalary());
}
}
/*
* 因為要實現對Employee物件的排序,所以在Employee類中要實現Comparable介面,
* 也就是要實現comepareTo()方法
*/
class Employee implements Comparable<Employee>
{
public Employee(String n, double s)
{
name = n;
salary = s;
Random ID = new Random();
id = ID.nextInt( 10000000 );
}
public int getId()
{
return id;
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public void raiseSalary( double byPercent)
{
double raise = salary *byPercent/ 100 ;
salary+=raise;
}
public int compareTo(Employee other)
{
if (id<other.id) //這裡比較的是什麼 sort方法實現的就是按照此比較的東西從小到大排列
return - 1 ;
if (id>other.id)
return 1 ;
return 0 ;
}
private int id;
private String name;
private double salary;
}
4.與Comparator的區別
Comparator位於包java.util下,而Comparable位於包java.lang下,Comparable介面將比較程式碼嵌入自身類中,而後者在一個獨立的類中實現比較。 如果類的設計師沒有考慮到Compare的問題而沒有實現Comparable介面,可以通過 Comparator來實現比較演算法進行排序,並且為了使用不同的排序標準做準備,比如:升序、降序。
我們看一個Comparator的例子:
import java.util.TreeSet;
import java.util.Comparator;
class NumComparator implements Comparator<NameTag> {
public int compare (NameTag left,NameTag right) {
return(left.getNumber() - right.getNumber());
}
}
public class CollectionNine {
public static void main(String arg[]) {
new CollectionNine();
}
CollectionNine() {
NumComparator comparator = new NumComparator();
TreeSet<NameTag> set = new TreeSet<NameTag>(comparator);
set.add(new NameTag("Agamemnon",300));
set.add(new NameTag("Cato",400));
set.add(new NameTag("Plato",100));
set.add(new NameTag("Zeno",200));
set.add(new NameTag("Archimedes",500));
for(NameTag tag : set)
System.out.println(tag);
}
}
相關文章
- 介面的定義和實現
- 通過Comparable來實現對自身的比較
- java的Comparator和ComparableJava
- OutputStreamWriter介紹&程式碼實現和InputStreamReader介紹&程式碼實現
- Comparable和Comparator的區別
- 從java內建類和自定義類比較Comparable介面和Comparator介面實現排序的不同Java排序
- Spartacus 註冊和登入頁面的實現細節
- 用WebBrowser實現HTML介面的應用和互動WebHTML
- 使用Web Datawindow ActiveX實現Web頁面的列印功能Web
- 簡單易懂的 Go 泛型使用和實現原理介紹Go泛型
- Java基礎系列-Comparable和ComparatorJava
- Java Comparable 和 Comparator 介面詳解Java
- Java 中 Comparable 和 Comparator 比較Java
- java基礎之Comparator和ComparableJava
- java Comparable和Comaprator的對比Java
- 如何實現查詢介面的所有實現類
- mqtt介紹和go程式碼實現MQQTGo
- 使用 proxy 實現的 mobx - dob 介紹
- 介面的實現方式(顯示和隱示)及協變和逆變
- 利用ServiceWorker實現頁面的快速載入和離線訪問
- jquery實現的iframe子頁面和父頁面的相互操作jQuery
- 給第三方使用介面的 URL 簽名實現
- visual studio 使用技巧 1:快速找到介面的實現類
- React從零實現-介紹和準備React
- htmltest~計算器介面的實現HTML
- Python greenlet使用介紹及實現原理Python
- golang中的類和介面的使用Golang
- Go型別嵌入介紹和使用型別嵌入模擬實現“繼承”Go型別繼承
- SATA介面和M.2介面的固態硬碟哪個好?SSD硬碟SATA介面和M.2介面的區別硬碟
- Java中Comparable和Comparator介面區別分析Java
- 最全面的CQRS和事件溯源介紹 - Software House ASC事件
- 關於利用jQuery實現愛奇藝裡面的滑鼠移入改變當前頁面的功能的實現原理jQuery
- 讓頁面的字型變得更清晰(css實現)和使用css樣式佈局價格劃線CSS
- 使用CORS實現ajax跨域簡單介紹CORS跨域
- Laravel 中 Facade 門面的實現Laravel
- iOS開發登入頁面的實現iOS
- 使用C# (.NET Core) 實現觀察者模式 (Observer Pattern) 並介紹 delegate 和 eventC#模式Server
- ubuntu系統共享桌面的使用和配置Ubuntu