兩者區別:
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);
}
}
我壹個壹個字打的希望采納,妳可以拿去程序中運行比較。