Java 按相反顺序排序数组-不反转
我试图将整数数组从最高到最低排序Java 按相反顺序排序数组-不反转,java,arrays,sorting,reverse,Java,Arrays,Sorting,Reverse,我试图将整数数组从最高到最低排序 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。为什么它没有被反转,或者为什么数组没有以反转状态永久存储?您显示的是数组排序的结果,而不是列表反转的结果。您需要将排序后的列表存
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
。为什么它没有被反转,或者为什么数组没有以反转状态永久存储?您显示的是数组排序的结果,而不是列表反转的结果。您需要将排序后的列表存储在一个临时变量中,将其反转,然后调用toArray以获得所需的行为
按相反顺序排序更简单的方法是:
Arrays.sort(array, (o1,o2)-> Integer.compare(o2,o1));
您显示的是数组排序的结果,而不是列表反转的结果。您需要将排序后的列表存储在一个临时变量中,将其反转,然后调用toArray以获得所需的行为 按相反顺序排序更简单的方法是:
Arrays.sort(array, (o1,o2)-> Integer.compare(o2,o1));
最“简单”的解决方案是使用集合
类提供的反向补偿器
。这将自动按降序对数组进行排序
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);
}
}
您的解决方案不起作用的原因。您可以临时创建一个包含
数组的列表。asList(array)
,您可以反向创建,以后不再引用该列表。这不会改变数组
变量的顺序。最“简单”的解决方案是使用集合
类提供的反向计算器
。这将自动按降序对数组进行排序
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);
}
}
您的解决方案不起作用的原因。您可以临时创建一个包含
数组的列表。asList(array)
,您可以反向创建,以后不再引用该列表。这不会更改数组
变量的顺序。代码中有几个问题:数组。由于列表
不会创建新的列表
,它实际上是一个列表
。但是,即使它如您所期望的那样工作,返回的列表只是一个临时对象,您仍然在打印数组
不幸的是,正确的解决方案并不十分优雅:
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);
}
int[]数组={2,6,4,1};
数组。排序(数组);
List asList=new ArrayList();
for(int i:array){
增加(i);
}
收款。反向(asList);
for(int num:asList){
系统输出打印项数(num);
}
您的代码中有几个问题:数组。asList
不会创建新的列表
,它实际上是一个列表
。但是,即使它如您所期望的那样工作,返回的列表只是一个临时对象,您仍然在打印数组
不幸的是,正确的解决方案并不十分优雅:
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);
}
int[]数组={2,6,4,1};
数组。排序(数组);
List asList=new ArrayList();
for(int i:array){
增加(i);
}
收款。反向(asList);
for(int num:asList){
系统输出打印项数(num);
}
我明白。我可以存储此列表,然后将其转换回数组吗?或者有没有更简单的方法对数组进行反向排序?我明白。我可以存储此列表,然后将其转换回数组吗?或者有没有更简单的方法对数组进行反向排序?