以下代码虽然看起来非常正确但不起作用:
import java.util.*;
public class Jaba {
public static void main(String args[]) {
Random rand = new Random();
int[] array = new int[10];
for (int i = 0; i < array.length; ++i) {
array[i] = rand.nextInt(30);
}
Queue<Integer> que = new PriorityQueue<Integer>();
Collections.addAll(que, Arrays.asList(array));
}
}
应该修复什么?
答案 0 :(得分:13)
Arrays.asList
获取一组对象。 (这是唯一的选择,因为它无法返回List<int>
。)
当您将int[]
传递给Arrays.asList
时,它将被解释为包含一个int[]
的单个数组。
你必须
更改为for循环:
for (int i : array)
que.add(i);
或
将array
的类型从int[]
更改为Integer[]
。
这将允许你做
que.addAll(Arrays.asList(array))
,或者
Collections.addAll(que, array);
Collections.addAll(que, Arrays.asList(array))
失败的原因是它需要T...
作为第二个参数,它实际上是数组而不是列表。
答案 1 :(得分:3)
类java.util.Collections中的方法addAll不能应用于给定的类型; required:java.util.Collection,T [] found:java.util.List,java.util.List reason:no variable(s)of type(s)T存在,以便参数类型java.util.List符合形式参数类型T []
因为List&lt; INT [] GT; !=列表&lt;整数取代。 Arrays.asList(T ...)返回T [],因此给它一个int []将返回一个int []。
为什么不使用:
Random rand = new Random();
Queue<Integer> que = new PriorityQueue<Integer>();
for (int i = 0; i < 10; ++i) {
que.add(rand.nextInt(30));
}
你真的需要int []数组吗?如果没有,上述情况应该可以完成。
- 使用Collections.addAll进行编辑:
Random rand = new Random();
Queue<Integer> que = new PriorityQueue<Integer>();
Integer[] toAdd = new Integer[10];
for (int i = 0; i < toAdd.length; ++i) {
toAdd[i] = rand.nextInt(30);
}
Collections.addAll(que, toAdd); // T ... Elements can be either separate elements, or a T[] array.
答案 2 :(得分:1)