实现对象排序有2种方式:
1.实现接口java.lang.Interface Comparable<T>:
参数:T
- 可以与此对象进行比较的那些对象的类型;
实现类必须确保对于所有的x 和 y 都存在sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果y.compareTo(x) 抛出一个异常,则x.compareTo(y) 也要抛出一个异常。)
实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着x.compareTo(z)>0。
最后返回:整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
//实现Comparable接口要覆盖compareTo方法, 在compareTo方法里面实现比较:
public class Animal implements Comparable {
String name;
int age
public int compareTo(Animal another) {
int i = 0;
i = name.compareTo(another.name); // 使用字符串的比较
if(i == 0) { // 如果名字一样,比较年龄, 返回比较年龄结果
return age - another.age;
} else {
return i; // 名字不一样, 返回比较名字的结果.
}
}
}
// 排序的时候就可以直接用 Collections.sort( List<Animal> ) 对其排序了.
2.实现接口java.util.Comparator<T>
类型参数:T
- 此 Comparator 可以比较的对象类型
Comparator 是在集合外部实现的排序; Comparator 是一个专用的比较器,当这个对象不支持自比较,或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间前后大小的比较。可以按照自己自定义的规则来比较;
<span style="font-size:18px;"><span style="font-size:18px;"><strong>class AnimalComparator implements Comparator {
public int compare(Animal one, Animal another) {
int i = 0;
i = one.name.compareTo(another.name); // 使用字符串的比较
if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果
return one.age - another.age;
} else {
return i; // 名字不一样, 返回比较名字的结果.
}
}
}
使用的时候:Collections.sort( personList , new AnimalComparator()) 可以对其排序</strong></span></span>
自定义自己的排序规则:
<span style="font-size:18px;"><strong><span style="font-size:18px;">public class AbsComparator implements Comparator {
public int compare(Object o1, Object o2) {
int v1 = Math.abs(((Integer)o1).intValue());
int v2 = Math.abs(((Integer)o2).intValue());
return v1 > v2 ? 1 : (v1 == v2 ? 0 : -1);
}
}</span></strong></span>