以创建一个Person类为例:
public class Person
{
int id;
int value;
}
修正前的代码:
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ListSortTesting {
public static void main(String[] args){
ArrayList<Person> list=new ArrayList<Person>();
Person p1=new Person();
p1.id=5; p1.value=1;
Person p2=new Person();
p2.id=2; p2.value=4;
Person p3=new Person();
p3.id=1; p3.value=1;
list.add(p1);
list.add(p2);
list.add(p3);
Collections.sort(list,new Comparator<Person>(){//从小到大
public int compare(Person x,Person y){
if(x.value>y.value)
return 1;
else if(x.value<y.value)
return -1;
else{//value相等则按id从小到大排序
if(x.id>=y.id)
return 1;
else
return -1;
}
}
});
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).id+" "+list.get(i).value);
}
}
}
修正后的代码:
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ListSortTesting {
public static void main(String[] args){
ArrayList<Person> list=new ArrayList<Person>();
Person p1=new Person();
p1.id=5; p1.value=1;
Person p2=new Person();
p2.id=2; p2.value=4;
Person p3=new Person();
p3.id=1; p3.value=1;
list.add(p1);
list.add(p2);
list.add(p3);
Collections.sort(list,new Comparator<Person>(){//从小到大
public int compare(Person x,Person y){
if(x.value>y.value)
return 1;
else if(x.value<y.value)
return -1;
else
{//value相等则按id从小到大排序
if(x.id>y.id)
return 1;
else if (x.id<y.id)
return -1;
else
return 0;
}
}
});
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).id+" "+list.get(i).value);
}
}
}
结论:
区别在于,对于JDK6.0以上的版本,由于兼容性的问题,重写compare方法时返回值必须同时考虑返回值为1、0和-1的情况,否则会报错。