Java 对不可比较元素列表进行排序

Java 对不可比较元素列表进行排序,java,comparable,Java,Comparable,今天我被问到一个采访问题: 如果我有一个Person类,带有name、age和salary字段,我将这个Person的100个新实例放在ArrayList中,然后执行Collections.sort(list),那么列表将根据什么参数排序 我知道我需要让Person类实现compariable,然后重写comparieto,但是如果我不这样做,会发生什么?它不会编译:的单参数版本需要一个compariable的列表。具体来说,列表,其中T实现了compariable,如Collections A

今天我被问到一个采访问题:

如果我有一个
Person
类,带有
name
age
salary
字段,我将这个
Person
的100个新实例放在
ArrayList
中,然后执行
Collections.sort(list)
,那么列表将根据什么参数排序


我知道我需要让
Person
类实现
compariable
,然后重写
comparieto
,但是如果我不这样做,会发生什么?

它不会编译:的单参数版本需要一个
compariable
的列表。具体来说,
列表
,其中
T
实现了
compariable,如Collections API所述:

public static <T extends Comparable<? super T>> void sort(List<T> list)

publicstatic是的,您可以对集合进行排序,而无需让元素实现可比较的接口,您可以这样做

List<YourType> theList = new ArrayList<>();
Collections.sort(theList, new Comparator<YourType>(){
    public int compare(YourType obj1, YourType obj2) {
                   // this method should return < 0, 0 or > 0 
                   // whether obj1 is less than, equal to 
                   // or greather than obj2
                    return 0; 
    }
});
List theList=new ArrayList();
Collections.sort(列表,新比较器(){
公共整数比较(类型obj1,类型obj2){
//此方法应返回<0、0或>0
//obj1是否小于、等于
//或者比obj2更伟大
返回0;
}
});
/编辑


如果使用Collections.sort(List),则仅当列表为泛型且其元素实现可比较时,它才会编译。如果是这样,那么在调用sort(list)方法后,每个元素上compareTo(Obj)的实现将决定列表中的顺序。如果
Person
类没有实现
Comparable
,那么(编译器将通知您):


绑定不匹配:集合类型的泛型方法
排序(列表)
不适用于参数
(列表)
。推断类型
Person
不是有界参数
的有效替代品。这看起来似乎合理,应该可以工作,但我在排序方法上遇到了一个错误:方法sort(List,Comparator