comparable接口
如果对象之间要进行排序或者二分查找,就要实现这个接口,比如容器类中的对象,通过实现这个接口中的compareTo接口,arrays.sort()就能按照这个规则进行排序—一般情况下equals方法实现需要和这个方法一致
接口定义如下
public interface Comparable<T> {
public int compareTo(T o);
}
实例—按照学生的年龄排序
class Student implements Comparable<Student>{
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public Student(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int compareTo(Student o) {
return age.compareTo(o.age);
}
}
comparator接口
如果想自己定义对象的排序顺序就需要加入这个接口的实现类
compartor接口定义–可以只实现其中的compare方法,equals看情况
public interface Comparator<T>
{
int compare(T o1,T o2);
boolean equals(object obj);
}
例如上面的学生类想按照它的名字排序
import java.util.Arrays;
import java.util.Comparator;
class Student implements Comparable<Student>{
private Integer age;
private String name;
public Integer getAge() {
return age;
}
public Student(int age, String name) {
this.age = age;
this.name = name;
}
public String getName() {
return name;
}
@Override
public int compareTo(Student o) {
return age.compareTo(o.age);
}
}
public class Main {
public static void main(String[] args) {
Student[] students=new Student[]{
new Student(26, "tangchen"),
new Student(23, "tang23"),
};
Arrays.sort(students,new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
return o1.getName().compareTo(o2.getName());
}
});
for (int i = 0; i <students.length ; i++) {
System.out.println(students[i].getName());
}
}
}