Java - 使用Collections.sort()进行排序

时间:2012-07-16 14:32:52

标签: java sorting collections integer double

我必须编写一个方法来对整数和双打进行排序。

public ArrayList<Number> sortDescending(ArrayList<Number> al){
    Comparator<Number> c=Collections.reverseOrder();
    Collections.sort(al,c);
    return al;
}

public ArrayList<Number> sortAscending(ArrayList<Number> al){
    Collections.sort(al);
    return al;
}

问题是在sortAscending中,会发生以下错误:

  

绑定不匹配:类型集合的通用方法sort(List)不适用于参数(ArrayList)。推断类型Number不是有界参数&lt;的有效替代。 T扩展可比较&lt; ?超级T&gt;&gt;

2 个答案:

答案 0 :(得分:9)

您需要使用与Number交叉的Comparable<T>的通用上限

public <T extends Number & Comparable<T>> ArrayList<T> sortDescending(ArrayList<T> al){
    Comparator<T> c=Collections.reverseOrder();
    Collections.sort(al,c);
    return al;
}

public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
    Collections.sort(al);
    return al;
}

所有JDK Numbers(例如FloatInteger等)都符合此类型。

对于初学者,语法<T extends A & B>是将T绑定到 AB的方式。

仅供参考,“或”逻辑没有语法(如果你考虑它也没有意义)

答案 1 :(得分:4)

您收到错误,因为号码未实现Comparable<Number>。您需要添加通用约束,以便它扩展数字和可比较。在这种情况下:

public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
    Collections.sort(al);
    return al;
}