Collections.addAll, Queue<Integer> and int[]
The following code doesn't work though it seems quite correct:
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));
}
}
What should be fixed?
Arrays.asList takes an array of objects. (It's the only option, as it can't return a List<int>.)
When you pass an int[] to Arrays.asList, it will be interpreted as a singleton array containing one int[].
You'll have to
Change to a for-loop:
for (int i : array) que.add(i);or
change the type of
arrayfromint[]toInteger[].This would allow you to do
que.addAll(Arrays.asList(array))or,
Collections.addAll(que, array);
The reason that Collections.addAll(que, Arrays.asList(array)) fails is that it takes a T... as second argument, which is really an array and not a List.
method addAll in class java.util.Collections cannot be applied to given types; required: java.util.Collection,T[] found: java.util.List,java.util.List reason: no instance(s) of type variable(s) T exist so that argument type java.util.List conforms to formal parameter type T[]
Because List< int[]> != List< Integer>. Arrays.asList(T ...) returns T[], so giving it an int[] will return a List of int[].
Why not just use:
Random rand = new Random();
Queue<Integer> que = new PriorityQueue<Integer>();
for (int i = 0; i < 10; ++i) {
que.add(rand.nextInt(30));
}
Do you really need the int[] array? If not, the above should do the job.
-- Edit, with 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.
You could use the google guava Ints class:
que.addAll(Ints.asList(array));
Where Ints.asList() converts an int[] to a List<Integer> which is what you need.
加载中,请稍侯......
精彩评论