Java比較器
內(nèi)部比較器: 實(shí)現(xiàn)comparable接口, 需要重寫(xiě)comparato方法
ps:寫(xiě)在創(chuàng)建類(lèi)的內(nèi)部,例如寫(xiě)個(gè)persion類(lèi),比較年齡! 讓類(lèi)實(shí)現(xiàn)該接口,去重寫(xiě)compareto方法即可
public class perison implements Comparable<Book> { // 實(shí)現(xiàn)比較
private String name;
private double age;
public perison(String name, double age) {
this.name = name;
this.age = age;
}
@Override
public String to String() {
return "姓名:" + this.title + " 年齡:" + this.price;
}
@Override
public int compareTo(perison o) { // Arrays.sort()會(huì)自動(dòng)調(diào)用此方法比較
if(this.age > o.age) {
return 1;
} else if(this.age < o.age) {
return -1;
} else {
return 0;
}
}
}
//compareTo()方法返回三類(lèi)數(shù)據(jù):1(大于)辛孵、0(等于)颠黎、-1(小于)
public class TestDemo {
public static void main(String args[]) {
perison ps [] = new perison [] {
new perison("JJ", 12),
new perison("TT", 18),
new perison("MM",22),
new perison("KK", 36),
};
Arrays.sort(ps); // 對(duì)象數(shù)組排序 會(huì)自動(dòng)調(diào)用內(nèi)部比較器
System.out.println(Arrays.toString(ps));
}
}
外部比較器:實(shí)現(xiàn)comparator接口,需要重寫(xiě)compare方法(主要是為了不修改已經(jīng)封裝好的類(lèi)對(duì)象)
ps:用在測(cè)試類(lèi)中,當(dāng)作一個(gè)方法的調(diào)用,用匿名內(nèi)部類(lèi)實(shí)現(xiàn)
比如 Collections.sort(集合,比較器)
compara和comparaTo方法共同之處浪秘,就是如果比較的數(shù)比被比較的數(shù)小返回-1
public class text {
public static void main(String[] args) {
ArrayList aa = new ArrayList();
persion p1 = new persion("小明", 18);
persion p2 = new persion("小", 24);
persion p3 = new persion("明", 19);
aa.add(p1);
aa.add(p2);
aa.add(p3);
Collections.sort(aa, new Comparator<persion>() {
@Override
public int compare(persion o1, persion o2) {
return o1.age - o2.age;
}
});
System.out.println(aa);
}
}