Java比较器
内部比较器: 实现comparable接口, 需要重写comparato方法
ps:写在创建类的内部,例如写个persion类,比较年龄! 让类实现该接口,去重写compareto方法即可
public class perison implements Comparable<Book> { // 实现比较
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()会自动调用此方法比较
if(this.age > o.age) {
return 1;
} else if(this.age < o.age) {
return -1;
} else {
return 0;
}
}
}
//compareTo()方法返回三类数据: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); // 对象数组排序 会自动调用内部比较器
System.out.println(Arrays.toString(ps));
}
}
外部比较器:实现comparator接口,需要重写compare方法(主要是为了不修改已经封装好的类对象)
ps:用在测试类中,当作一个方法的调用,用匿名内部类实现
比如 Collections.sort(集合,比较器)
compara和comparaTo方法共同之处,就是如果比较的数比被比较的数小返回-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);
}
}
网友评论