我正在尝试从最高到最低排序整数数组。
int[] array = {2, 6, 4, 1};
Arrays.sort(array);
Collections.reverse(Arrays.asList(array));
for (int num : array) {
System.out.println(num);
}
这将按升序打印数组 - 1, 2, 4, 6
。为什么它没有被反转,或者为什么数组没有永久存储在其反转状态?
答案 0 :(得分:2)
最“简单”的解决方案是使用reverseComperator
类提供的Collections
。这将按降序自动对数组进行排序。
public static void main(String[] args) {
// Use the Wrapper class, otherwise you can´t call Arrays.sort with a comperator.
Integer[] array = {2, 6, 4, 1};
Arrays.sort(array, Collections.reverseOrder());
for (int num : array) {
System.out.println(num);
}
}
为什么你的解决方案不起作用
您临时创建一个带有Arrays.asList(array)
的列表,您可以将其反转,之后不再提及。这不会改变array
变量的顺序。
答案 1 :(得分:0)
您正在显示对数组进行排序的结果,而不是反转列表的结果。您需要将排序列表存储在临时变量中,将其反转,然后调用toArray以获得所需的行为。
以相反顺序排序的更直接的方法是:
Arrays.sort(array, (o1,o2)-> Integer.compare(o2,o1));
答案 2 :(得分:0)
您的代码中存在以下几个问题:Arrays.asList
未创建新List<Integer>
,实际上是List<int[]>
。但即使它按预期工作,返回的列表也只是一个临时对象,你还在打印数组。
不幸的是,正确的解决方案不是很优雅:
int[] array = {2, 6, 4, 1};
Arrays.sort(array);
List<Integer> asList = new ArrayList<Integer>();
for(int i : array) {
asList.add(i);
}
Collections.reverse(asList);
for (int num : asList) {
System.out.println(num);
}