Java中Comparable講解


Comparable是排序接口;若一個類實現了Comparable接口,就意味着“該類支持排序”。可以使用Arrays.sort()對改類進行排序。

講解

1.Comparable接口

使用場景:假如說我們有這樣一個需求,需要設計一個Person類,有兩個屬性:姓名(name)、年齡(age),按照年齡的大小進行排序,那么實現可以這樣

package com.ikos.web;

import java.util.Arrays;

class Person implements Comparable<Person>{
    int age;
    String name;

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "姓名:"+name+","+"年齡:"+age+";";
    }

    @Override
    public int compareTo(Person o) {
        // TODO Auto-generated method stub
        if(this.age>o.age){
            return 1;
        }else if(this.age<o.age){
            return -1;
        }
        //當然也可以這樣實現
        // return Integer.compare(this.age, o.age);
        return 0;
    }
    public static void main(String[] args) {

        Person []persons = new Person[]{
                new Person("張三",15),
                new Person("李四",25),
                new Person("王五",20)
        };
        Arrays.sort(persons);
        System.out.println(Arrays.toString(persons));
        System.out.println(persons[0]==persons[1]);
        System.out.println(persons[0].equals(persons[1]));

    }
}

結果:

 

 

 

注意細節:

Comparable<T>接口里面有一個泛型T,T的選擇為可以與之比較的對象的類型,一般就是實現該接口類的本身,可以這樣想和Person類比較的當然是Person本身了。
Comparable<T>只是在Arrays里面起作用,其他地方目前我並沒有發現什么作用,包括運算符和equals上,這個接口也不起什么作用

2.Comparator接口

Comparator也是一個比較器,但是屬於挽救設計的一種,一般來說盡量減少。

下面的例子演示了Comparator泛型的使用"extends"如何使用在一般意義上的意思"extends"(類)或者"implements"(接口)。

該例子中的泛型方法返回三個可比較對象的最大值。

package com.ikos.web;

import java.util.Arrays;

class Person {
// 比較三個值並返回最大值
public static <T extends Comparable<T>> T maximum(T x, T y, T z)
{
T max = x; // 假設x是初始最大值
if ( y.compareTo( max ) > 0 ){
max = y; //y 更大
}
if ( z.compareTo( max ) > 0 ){
max = z; // 現在 z 更大
}
return max; // 返回最大對象
}
public static void main(String[] args) {
System.out.printf( "%d, %d 和 %d 中最大的數為 %d\n\n",
3, 4, 5, maximum( 3, 4, 5 ) );
System.out.printf( "%s, %s 和 %s 中最大的數為 %s\n","abc",
"zabc", "orange", maximum( "abc", "zabc", "orange" ) );
}
}

結果輸出:

3, 4 和 5 中最大的數為 5

abc, zabc 和 orange 中最大的數為 zabc

 

總結

Comparable和Comparator的區別:

  • java.lang.Comparable:在類定義的時候,可以實現好的接口,里面有compareTo這個方法需要實現。
  • java.util.Comparator:是挽救的比較接口,需要單獨定義一個比較類,里面有compare比較方法。

在更多情況下我們使用比較多的還是Comparable接口,在實際開發過程中的話,其實兩者使用都比較少。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM