报错The method sort(List<T>) in the type Collections is not applicable for the arguments (ArrayList<Number>)
时间: 2024-02-20 13:01:28 浏览: 333
出现这个错误的原因是因为 `Collections.sort()` 的参数是 `List<T>` 类型,而 `ArrayList<Number>` 只是 `List` 的一个子类。解决这个问题的方法是将 `ArrayList<Number>` 转换为 `List<Number>`,即:
```
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SortArrayList {
public static void sort(ArrayList<Number> list) {
List<Number> tempList = new ArrayList<>(list);
Collections.sort(tempList);
list.clear();
list.addAll(tempList);
}
}
```
在上面的代码中,我们先将传入的 `ArrayList<Number>` 转换为 `List<Number>`,然后使用 `Collections.sort()` 对 `tempList` 进行排序,并将结果存储在 `tempList` 中。最后,我们将 `tempList` 中的元素清空,并将排好序的元素添加回原始的 `ArrayList<Number>` 中。这样就完成了对 `ArrayList<Number>` 的排序。
相关问题
The method sort(List<T>) in the type Collections is not applicable for the arguments (List<Number>)
这个错误可能是因为 `List<Number>` 中的元素类型 `Number` 并没有实现 `Comparable` 接口,导致 `Collections.sort()` 方法无法对其进行排序。解决这个问题的方法是在调用 `sort()` 方法时,传入一个 `Comparator` 对象,该对象定义了元素的比较规则。具体实现如下:
```
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortArrayList {
public static void sort(List<Number> list) {
Collections.sort(list, new Comparator<Number>() {
@Override
public int compare(Number o1, Number o2) {
return Double.compare(o1.doubleValue(), o2.doubleValue());
}
});
}
}
```
在上面的代码中,我们先将传入的 `List<Number>` 直接传递给 `Collections.sort()` 方法中。然后,我们创建了一个匿名内部类实现了 `Comparator<Number>` 接口,重写了其 `compare()` 方法,定义了 `Number` 元素的比较规则。在这里,我们使用 `o1.doubleValue()` 和 `o2.doubleValue()` 方法获取 `Number` 元素的 double 值,然后使用 `Double.compare()` 方法进行比较。最终返回一个排好序的 `List<Number>`。
阅读全文