在java中一提到比较器就应该想到Comparable和Comparator接口,使用他们就可以自定义比较方法。
Comparable可以认为是内比较器,类实现它就说明该类可以自我比较,可以实现排序。
用法是实现该接口的 public int compareTo(T o); 方法。具体用法如下:
如下实例说明Person类可以根据height进行排序,我们只需要调用Arrays.sort()方法即可。
public class Person implements Comparable<Person>{
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<Person> {
// 返回正数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());
}
}