1. 实现对象的排序
可以考虑两种方法,自然排序、定制排序
2. 方式一: 实现Comparable接口的方式
实现步骤:
① 具体的类A实现 Comparable 接口
② 重写 Comparable 接口中的 compareTo(object ob) 方法,在此方法中指明比较类A的对象的大小的标准
③ 创建类A的多个实例,进行大小的比较或排序。
当前的类需要实现 Comparable 中的抽象方法:compareTo(Object o)在此方法中,指明如何判断当前类的对象的大小。比如: 按照年龄的大小进行比较。 (或从低到高排序)
如果返回值是正数:当前对象大
如果返回值是负数:当前对象小
如果返回值是0,一样大
public class compare implements Comparable {
@Override
public int compareTo(Object o) {
if (o == this) {
return 0;
}
if (o instanceof compare) {
compare c = (compare) o;
return c.age - this.age;
}
throw new RuntimeException("类型不匹配");
}
}
比较标准:先比较年龄,如果年龄相同,再比较姓名
@Override
public int compareTo(Object o) {
if (o == this) {
return 0;
}
if (o instanceof compare) {
compare c = (compare) o;
int value = c.age - this.age;
if(value != 0){
return value;
}
return c.name.compareTo(this.name);
}
throw new RuntimeException("类型不匹配");
}
}
3. 方式二:实现Comparator接口的方式
实现步骤:
①创建一个实现了 Comparator 接口的实现类A
②实现类A要求重写 Comparator 接口中的抽象方法 compare(0bject o1,bject 2),在此方法中指明要比较大小的对象的大小关系。(比如,string类、Product类)
③创建此实现类A的对象,并将此对象传入到相关方法的参数位置即可。(比如,Arrays.sort(..,类的实例))
public static void main(String[] args) {
compare[] c = new compare[5];
c[0] = new compare("Tom",18);
c[1] = new compare("Tony",18);
c[2] = new compare("lucky",41);
c[3] = new compare("lucci",23);
c[4] = new compare("curry",34);
//创建一个实现Comparator接口的实现类的对象
Comparator comparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof compare && o2 instanceof compare) {
compare c0 = (compare) o1;
compare c1 = (compare) o2;
return c0.getAge()-c1.getAge();
}
throw new RuntimeException("类型不匹配");
}
};
Arrays.sort(c,comparator);
for (int i = 0; i<c.length ; i++){
System.out.println(c[i]);
}
}
4. 对比两种方式
角度一
自然排序:单一的,唯一的
定制排序:灵活的,多样的
角度二
自然排序:一劳永逸的
定制排序:临时的
角度三:细节
自然排序: 对应的接口是comparable,对应的抽象方法compareTo(object obj)
定制排序: 对应的接口是Comparator,对应的抽象方法compare(object obj1,0bject obj2)