Arrays.asList()不能按预期应用于原始类型的数组。当应用于时
int[],将
Arrays.asList()产生的列表,
int[]而不是的列表
Integer。因此,您将重新整理一个新创建的列表
int[]。
这是Java中可变参数和泛型的微妙行为。
Arrays.asList()被声明为
public static <T> List<T> asList(T... a)
因此,它可以采用某些类型的多个参数T并生成包含这些参数的列表,也可以采用一个类型的参数T[]并返回此数组支持的列表(可变参数的工作方式)。
但是,后一种选项仅在
T为引用类型时才起作用(即,不是诸如的原始类型int),因为只有引用类型可以用作泛型T中的类型参数(并且是类型参数)。
因此,如果您通过int[],则会得到
T=int[],并且代码无法按预期工作。但是,如果您传递引用类型的数组(例如
Integer[]),则会得到T= Integer并且一切正常:
Integer[] arr = new Integer[10]; for (int i = 0; i < arr.length; i++) { arr[i] = i; } Collections.shuffle(Arrays.asList(arr)); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)