当需要对一组对象进行排序的时候,一定要指定比较规则,
这种比较规则主要是将某一个类中的几个属性进行比较。
对于这种比较器的实现,在Java中有两种接口完成:
Comparable:使用的最广泛的一种
Comparator:属于挽救的比较的一种
Comparable接口
Arrays.sort(per); Person已经继承了排序方法
如果对象数组要排序,则对象所在的类必须实现Comparable接口。
该接口具有唯一的方法compareTo(Object),其定义为:
public interface Comparable<T>
{
public int compareTo(Object o);
}
它将当前对象与对象 o 进行比较。如果他们相等,就返回0。如果调用对象比对象o小,则返回一个负值。否则返回一个正值。
实现了Comparable接口的类实例对象的列表或数组将自动地由Collections.sort或者Arrays.sort依据自然排序规则升序排列
样例:
class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "姓名:" + this.name + ",年龄:" + this.age;
}
public int compareTo(Person o) {
if (this.age > o.age) {
return 1;
} else if (this.age < o.age) {
return -1;
} else {
return 0;
}
}
}
public class Test {
public static void main(String[] args) {
Person per[] = { new Person("张三", 20), new Person("李四", 19), new Person("王五", 23) };
Arrays.sort(per);
for (int x = 0; x < per.length; x++) {
System.out.println(per[x]);
}
}
}
Comparator接口
若一个对象数组需要满足多个排序规则那么需要使用Comparator;
Arrays.sort(per,new PersonComparator()); 要有指定的排序类
该接口有两个方法:
public interface Comparator{
public int compare(Object o1,Object o2);
public Boolean equals(Object obj);
}
ü compare方法比较o1和o2,如果对象o1小于、等于或大于对象o2,方法将分别返回负数、零和正数。
ü定义一个类实现Comparator接口作为指定类的排序类,在此类中只实现compare方法。
样例:
class Person {
***
}
class PersonComparator implements Comparator<Person> {
//实现compare方法
public int compare(Person o1, Person o2) {
if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o1.getAge() < o2.getAge()) {
return -1;
} else {
return 0;
}
}
}
public class Test {
public static void main(String[] args) {
Person per[] = { new Person("张三", 20), new Person("李四", 19), new Person("王五", 23) };
//用Comparator接口作为指定类的排序类
Arrays.sort(per,new PersonComparator());
}
}