在java中一提到比较器就应该想到Comparable和Comparator接口,使用他们就可以自定义比较方法。
Comparable可以认为是内比较器,类实现它就说明该类可以自我比较,可以实现排序。
用法是实现该接口的 public int compareTo(T o); 方法。具体用法如下:
如下实例说明Person类可以根据height进行排序,我们只需要调用Arrays.sort()方法即可。
public class Person implements Comparable{ String name; int height; // 返回0:this等于o,返回正数:this大于o,返回负数:this小于o @Override public int compareTo(Person o) { if (this.height == o.height) return 0; return this.height - o.height; } public Person(int height) { this.height = height; } } public class Entrance { public static void main(String[] args) { // TODO Auto-generated method stub Person[] persons = {new Person(5) ,new Person(2) ,new Person(6) ,new Person(1) ,new Person(0) ,new Person(9) ,new Person(3) ,new Person(4) ,new Person(7) ,new Person(8) }; Arrays.sort(persons); } }
Comparator可以认为是外比较器,一个类如果无法比较,我们可以创建一个该类的比较器,这个类利用这个比较器就可以实现比较排序了。
用法是创建一个类实现Comparator接口,再实现该接口的 **int compare(T o1, T o2);**方法。具体用法如下:
public class Person{
String name;
int height;
public Person(int height) {
this.height = height;
}
}
public class PersonComparator implements Comparator {
// 返回正数o2在前,返回负数o1在前,返回0谁在前无所谓
// 升序o1-o2,降序o2-o1
@Override
public int compare(Person o1, Person o2) {
return o1.height-o2.height;
}
}
public class Entrance {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person[] persons = {new Person(5)
,new Person(2)
,new Person(6)
,new Person(1)
,new Person(0)
,new Person(9)
,new Person(3)
,new Person(4)
,new Person(7)
,new Person(8)
};
Arrays.sort(persons,new PersonComparator());
}
}



