Collections.addAll,Queue <integer>和int [] </integer>

时间:2011-06-21 11:46:50

标签: java

以下代码虽然看起来非常正确但不起作用:

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));
    }

}

应该修复什么?

3 个答案:

答案 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)

您可以使用google guava Ints类:

    que.addAll(Ints.asList(array));

Ints.asList()int[]转换为您需要的List<Integer>