當前位置:成語大全網 - 新華字典 - java中comparable接口與comparator接口的區別,&&請求代碼示例,非常謝謝

java中comparable接口與comparator接口的區別,&&請求代碼示例,非常謝謝

數值用比較運算符> < ==等來比較大小,字符串用equals比較內容是否相等。但是對象怎麽比較大小呢?用這兩接口Comparator和Comparable

兩者區別:

Comparator接口在java.util包下,用於提供比較的規則,常和Arrays.sort(對象數組,比較規則);或Collections.sort(集合,比較規則);搭配使用。前面的數組或集合按照後面的比較規則來排序。比較規則是Comparator接口類型的對象,可創建類實現該接口,重寫compare方法,在方法體自定義比較規則,價格重量點擊率都可以,對參數中傳入的兩個對象比較,根據返回值o1>o1默認升序排列

Comparable接口在java.lang包下,實現compareTo方法對對象排序,該方法只有壹個參數

public int compareTo(Object obj)

對象.obj ==0 對象==obj

對象.obj ==正數 對象>obj

對象.obj ==負數 對象<obj

綜上所述:

Comparator常用於提供比較規則,需搭配使用

Comparable:要比較的對象直接實現該接口

例子:使用Comparator接口

package shwg.action;

import java.util.Arrays;

import java.util.Comparator;

//按字符串長度比較對象大小

public class Demo {

public static void main(String[] args) {

String[] names = {"Tom","Jerry","Andy","Lee"};

Arrays.sort(names, new ByLength());

System.out.println(Arrays.toString(names));

}

}

class ByLength implements Comparator<String>{

//只需兩個隨機對象o1 o2間比較,若compare方法返回正數,

// 會按升序排列(長度由小到大排)

public int compare(String o1, String o2) {

int r = o1.length() - o2.length();

if (r == 0) {

//若長度相等,根據字符串首字母大小比,加上符號是為了首字母按字典順序排

return -(o1.charAt(0) - o2.charAt(0));

}

return r;

}

}

例子2:使用Comparable接口

package shwg.action;

import java.util.Collections;

import java.util.LinkedList;

import java.util.List;

//註意:只要實現Comparable接口裏面的compareTo方法,那麽該方法會被自動調用

public class Name implements Comparable{

private String firstName, lastName;

public Name(String firstName, String lastName) {

this.firstName = firstName;

this.lastName = lastName;

}

public String toString() {return firstName + " " + lastName;}

//同壹個類型的對象比較才有意義,可以用泛型<>約定

public int compareTo(Object o) {

Name a = (Name)o;

//lastName是String類型,已實現Comparable接口,可直接調compareTo方法

//比較時,從首字母往後壹個個字母比ASCII值得大小排序

int lastCmp = lastName.compareTo(a.lastName);

//lastName相同比較firstName,將整型值返回

return lastCmp !=0 ? lastCmp : firstName.compareTo(a.firstName);

}

//測試

public static void main(String[] args) {

List l = new LinkedList();

l.add(new Name("Karl", "M"));

l.add(new Name("Steven", "Lee"));

l.add(new Name("Jhon", "O"));

Collections.sort(l);

System.out.println(l);

}

}

我壹個壹個字打的希望采納,妳可以拿去程序中運行比較。