求教:Collections.reverse()为什么不能将数组元素的顺序颠倒?

时间:2022-05-07 19:43:25
我将10个随机数存入int数组a,然后用Arrays.sort(a)排序,想再用Collections.reverse(Arrays.asList(a))将其排成降序,但是没有成功,输出的还是升序,哪位帮忙看看是什么原因,源代码如下:
import java.util.*;
public class Exe1111
{
    public static void main(String[] args)
    {
        int[] a = new int[10];
        Random rd = new Random();
        for(int i=0; i<10; i++)
        {
            a[i] = rd.nextInt(10000);
            System.out.println(a[i]);
        }
        Arrays.sort(a);
        for(int j=0; j<10; j++)
        {
            System.out.println("asc:" + a[j]);
        }
        Collections.reverse(Arrays.asList(a));
        System.out.println(Arrays.toString(a)); //输出的字符串中的数字顺序与使用Arrays.sort(a)后一样,都是升序,为什么啊?
    }
}

12 个解决方案

#1


Arrays.asList(a)返回什么?
Collections.reverse(Arrays.asList(a)); //会不会改变a?


List l = Arrays.asList(1,2,3);
        Collections.reverse(l);
        System.out.println(l);

#2


import java.util.*; 
public class Exe1111 

    public static void main(String[] args) 
    { 
        int[] a = new int[10]; 
        Random rd = new Random(); 
        for(int i=0; i <10; i++) 
        { 
            a[i] = rd.nextInt(10000); 
            System.out.println(a[i]); 
        } 
        Arrays.sort(a); 
        for(int j=0; j <10; j++) 
        { 
            System.out.println("asc:" + a[j]); 
        } 
        Collections.reverse(Arrays.asList(a)); //你是对asList方法返回的List排序,跟a没关系,所以下面输出的a不变
        System.out.println(Arrays.toString(a));  
    } 
}

#3


学习

#4


我是楼主,请问要怎么样才能既使用Collections.reverse(),又将颠倒顺序后的数输出?

#5


int[] a = new int[10];
...
Arrays.asList(a);  //关键在这句,asList 把 a 包装成了一个长度为 1 元素类型为 int[] 的 List 了。

//下面代码能验证
List list = Arrays.asList(a);
System.out.println(list.size());  //结果为 1
System.out.println(list.get(0));  //结果为 [I@de6ced

#6


引用 4 楼 benliao 的回复:
我是楼主,请问要怎么样才能既使用Collections.reverse(),又将颠倒顺序后的数输出?


import java.util.Arrays;
import java.util.Collections;
import java.util.Random;

public class Exe1111 {

public static void main(String[] args) {
Integer[] a = new Integer[10];
Random rd = new Random();
for (int i = 0; i < a.length; i++) {
a[i] = rd.nextInt(10000);
System.out.println(a[i]);
}
Arrays.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.println("asc:" + a[i]);
}
Collections.reverse(Arrays.asList(a));
System.out.println(Arrays.toString(a));
}

}

#7


做不出来呢。。。看了很久API,找不到适合的类来做。。。本人太菜了。。。

#8


谢谢sagezk!你说的办法果然管用。

#9


 int[] a = new int[10]; 
Integer[] a = new Integer[10];
主要区别是什么呢,为什么用Integer就可以?可以说说原因吗?

#10


因为Arrays.asList(a)产生一个List对象。如果a为int型数组,Arrays.asList(a)将产生一个长度为1的List对象,这个对象只包含一个元素,这个元素的值就是整个int型数组。如果a是Integer数组,Arrays.asList(a)产生的List对象的每个元素与Integer数组的元素一一对应。          Collections.reverse(Arrays.asList(a))是对这个List对象中的每个元素进行排序。所以只能用Integer数组

#11


求教:Collections.reverse()为什么不能将数组元素的顺序颠倒?求教:Collections.reverse()为什么不能将数组元素的顺序颠倒?
学习啊

#12


学习了,谢谢

#1


Arrays.asList(a)返回什么?
Collections.reverse(Arrays.asList(a)); //会不会改变a?


List l = Arrays.asList(1,2,3);
        Collections.reverse(l);
        System.out.println(l);

#2


import java.util.*; 
public class Exe1111 

    public static void main(String[] args) 
    { 
        int[] a = new int[10]; 
        Random rd = new Random(); 
        for(int i=0; i <10; i++) 
        { 
            a[i] = rd.nextInt(10000); 
            System.out.println(a[i]); 
        } 
        Arrays.sort(a); 
        for(int j=0; j <10; j++) 
        { 
            System.out.println("asc:" + a[j]); 
        } 
        Collections.reverse(Arrays.asList(a)); //你是对asList方法返回的List排序,跟a没关系,所以下面输出的a不变
        System.out.println(Arrays.toString(a));  
    } 
}

#3


学习

#4


我是楼主,请问要怎么样才能既使用Collections.reverse(),又将颠倒顺序后的数输出?

#5


int[] a = new int[10];
...
Arrays.asList(a);  //关键在这句,asList 把 a 包装成了一个长度为 1 元素类型为 int[] 的 List 了。

//下面代码能验证
List list = Arrays.asList(a);
System.out.println(list.size());  //结果为 1
System.out.println(list.get(0));  //结果为 [I@de6ced

#6


引用 4 楼 benliao 的回复:
我是楼主,请问要怎么样才能既使用Collections.reverse(),又将颠倒顺序后的数输出?


import java.util.Arrays;
import java.util.Collections;
import java.util.Random;

public class Exe1111 {

public static void main(String[] args) {
Integer[] a = new Integer[10];
Random rd = new Random();
for (int i = 0; i < a.length; i++) {
a[i] = rd.nextInt(10000);
System.out.println(a[i]);
}
Arrays.sort(a);
for (int i = 0; i < a.length; i++) {
System.out.println("asc:" + a[i]);
}
Collections.reverse(Arrays.asList(a));
System.out.println(Arrays.toString(a));
}

}

#7


做不出来呢。。。看了很久API,找不到适合的类来做。。。本人太菜了。。。

#8


谢谢sagezk!你说的办法果然管用。

#9


 int[] a = new int[10]; 
Integer[] a = new Integer[10];
主要区别是什么呢,为什么用Integer就可以?可以说说原因吗?

#10


因为Arrays.asList(a)产生一个List对象。如果a为int型数组,Arrays.asList(a)将产生一个长度为1的List对象,这个对象只包含一个元素,这个元素的值就是整个int型数组。如果a是Integer数组,Arrays.asList(a)产生的List对象的每个元素与Integer数组的元素一一对应。          Collections.reverse(Arrays.asList(a))是对这个List对象中的每个元素进行排序。所以只能用Integer数组

#11


求教:Collections.reverse()为什么不能将数组元素的顺序颠倒?求教:Collections.reverse()为什么不能将数组元素的顺序颠倒?
学习啊

#12


学习了,谢谢