示例代码一
public static void demo() {
Person p9 = new Person();
p9.setName("张9");
p9.setAddress("成都9");
p9.setAge(9);
Person p1 = new Person();
p1.setName("张1");
p1.setAddress("成都1");
p1.setAge(1);
Person p2 = new Person();
p2.setName("张2");
p2.setAddress("成都2");
Person p3 = new Person();
p3.setName("张3");
p3.setAddress("成都3");
p3.setAge(1);
ArrayList<Person> list = new ArrayList<>();
list.add(p3);
list.add(p9);
list.add(p1);
list.add(p2);
System.out.println(list.toString());
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
if(o1.getAge() > o2.getAge()){
return 1;
}
//if (o1.getAge() == o2.getAge()){
// return 0;
//}
return -1;
}
});
System.out.println(list.toString());
}
输出结果
[Person{name='张3', age=1, address='成都3'}, Person{name='张9', age=9, address='成都9'}, Person{name='张1', age=1, address='成都1'}, Person{name='张2', age=0, address='成都2'}]
[Person{name='张2', age=0, address='成都2'}, Person{name='张1', age=1, address='成都1'}, Person{name='张3', age=1, address='成都3'}, Person{name='张9', age=9, address='成都9'}]
将示例代码中,把注释的代码注释去掉,可以正常显示,也就是当排序的序号相同的时候,需要返回return 0 ,这样就可以保持排序不变。
if (o1.getSort() == o2.getSort()) {
return 0;
}
返回值 | 含义 |
---|---|
负整数 | 当前对象的值 < 比较对象的值 , 位置排在前 |
零 | 当前对象的值 = 比较对象的值 , 位置不变 |
正整数 | 当前对象的值 > 比较对象的值 , 位置排在后 |
这里我们需要升序排列 ,如果if中如果是true就说明o1.getAge() > o2.getAge(),也就是排在前面的比排在后面的大,因为我们是升序,因此需要换位置,也就是当前对象需要在比较对象的后面,如果o1.getAge() == o2.getAge(),这不变位置,其他情况都将当前对象放在对比对象之前,这里的其实情况也就是o1.getAge() < o2.getAge() 的时候
if(o1.getAge() > o2.getAge()){
return 1;
}
如果需要降序排序可以写成
@Override
public int compare(Person o1, Person o2) {
if(o1.getAge() > o2.getAge()){
return -1;
}
if (o1.getAge() == o2.getAge()){
return 0;
}
return 1;
}
备注:如果是单独的比较比如定义一个
int[] a = {1,5,2,,7,6,11,66,22};
这样定义,Arrays.sort()为默认排序,如果需要改变默认排序就需要通过compartor来实现,这是需要用integer才行