实现Comparable接口的一般目的都是为了集合排序, 也可以单独调用。
重写compareTo方法,编写要比较的属性代码。
public class People implements Comparable<People> {
public String name;
public int age;
public int age2;
// 普通版
// public int compareTo(People o) {
// if (age > o.age) {
// return 1;
// }
// if (age < o.age) {
// return -1;
// }
// if (age2 > o.age2) {
// return 1;
// }
// if (age2 < o.age2) {
// return -1;
// }
//
// return 0;
// }
//改进版
public int compareTo(People o) {
int aget = age - o.age;
if (aget!=0) {
return aget;
}
int age2t = age2 - o.age2;
if (age2t!=0) {
return age2t;
}
return 0;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
", age2=" + age2 +
'}';
}
public People(String name, int age, int age2) {
this.name = name;
this.age = age;
this.age2 = age2;
}
public People() {
}
}
测试
@Test
public void test1() {
List<People> arrayList = Lists.newArrayList();
arrayList.add(new People("张三", 2, 3));
arrayList.add(new People("王五", 1, 2));
arrayList.add(new People("赵六", 2, 1));
Collections.sort(arrayList);
for (People people : arrayList) {
System.out.println(people.toString());
}
}
结果
注意: 改进版写法,一定要确保要比较的属性不能为负数,或者age为负数最小,age2为正数最大,那age-age2就会报异常,超出了类型的最大数值范围。