如何将ArrayList转换为Array然后在Java中返回?

时间:2013-10-18 08:26:01

标签: java arrays arraylist

我正在尝试创建一个方法来创建给定数字的素因子列表,然后将它们返回到数组中。除了将ArrayList转换为Array之外,一切似乎都能正常工作。另外,我不确定我是否正确返回数组。

这是我的代码......

static int[] listOfPrimes(int num) {
    ArrayList primeList = new ArrayList();
    int count = 2;
    int factNum = 0;

    // Lists all primes factors.
    while(count*count<num) {
        if(num%count==0) {
            num /= count;
            primeList.add(count);
            factNum++;
        } else {
            if(count==2) count++;
            else count += 2;
    }
}
int[] primeArray = new int[primeList.size()];
primeList.toArray(primeArray);
return primeArray;

我编译时会返回此错误消息...

D:\JAVA>javac DivisorNumber.java
DivisorNumber.java:29: error: no suitable method found for toArray(int[])
            primeList.toArray(primeArray);
                     ^
method ArrayList.toArray(Object[]) is not applicable
  (actual argument int[] cannot be converted to Object[] by method invocatio
n conversion)
method ArrayList.toArray() is not applicable
  (actual and formal argument lists differ in length)
Note: DivisorNumber.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

另外,我不确定如何接收返回的数组,所以我也需要一些帮助。谢谢!

3 个答案:

答案 0 :(得分:8)

如果要使用通用的toArray()方法,则需要使用Integer包装类而不是基本类型int

Integer[] primeArray = new Integer[primeList.size()];
primeList.toArray(primeArray);

编译器给出的错误是声明您要调用的方法(List#toArray(T[]))不适用于int[]类型的参数,只是因为int不是Object(它是原始类型)。 Integer Object但是,包裹int(这是Integer类存在的主要原因之一)。

当然,您也可以手动迭代List并将Integer元素添加为数组中的int

这里有一个相关的问题:How to convert List to int[] in Java?有许多其他建议(Apache commons,guava,...)

答案 1 :(得分:0)

int[] primeArray = primeList.toArray(new int[primeList.size()]);

但我对使用int而非使用Integer

执行此操作并不是很有信心

答案 2 :(得分:0)

将int []数组更改为Integer []

static Integer[] listOfPrimes(int num) {
    List<Integer> primeList = new ArrayList<Integer>();
    int count = 2;
    int factNum = 0;

    // Lists all primes factors.
    while (count * count < num) {
        if (num % count == 0) {
            num /= count;
            primeList.add(count);
            factNum++;
        } else {
            if (count == 2)
                count++;
            else
                count += 2;
        }
    }

    return primeList.toArray(new Integer[0]);
}