如何在Java中将ArrayList转换为数组并返回?

4
我正在尝试创建一个方法,它可以创建给定数字的质因数列表,然后将它们以数组形式返回。除了 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

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

1
可能是重复的问题:如何将包含整数的ArrayList转换为基本int数组? - Alexis C.
1
Java集合只能保存对象。例如,int是一种原始数据类型,不能保存在ArrayList中。你需要使用Integer来代替。https://dev59.com/cXNA5IYBdhLWcg3wcNbF - muthu
你使用集成开发环境(IDE)吗,比如Netbeans、IntelliJ或Eclipse? - Reporter
我不喜欢过于复杂的示例。你能证明你不能用一行代码展示你想做的吗?为什么循环很重要? - Val
是的,很抱歉发了重复的帖子。那时已经凌晨两点了,我已经厌倦了寻找相关帖子。再次对不起Val,当时真的已经是凌晨两点了。 - SadBlobfish
3个回答

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添加到数组中。
这里还有一个相关的问题:如何在Java中将List转换为int[]?,其中有许多其他建议(Apache commons,guava等)。

非常感谢!我完全不知道int和Integer之间有区别。 - SadBlobfish
欢迎来到StackOverflow!很高兴能帮到您。请记得给有用的答案点赞,并接受您认为最好回答了您问题的那个答案(参见如何接受答案?)。这将有助于未来访问此问题的其他人。 - Xavi López

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

但是我用 int 比用 Integer 没有太大信心能做到这一点。


-2

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接