将ArrayList<Integer>转换为int[]的最快方法

3
在Java中,以下是最快的解决方案:

可能重复:
如何将List<Integer>转换为int []?

请注意,不要修改html标记。

public convert(ArrayList<Integer> IntegerList) {

    int s = IntegerList.size();
    int[] intArray = new int[s];
    for (int i = 0; i < s; i++) {
        intArray[i] = IntegerList.get(i).intValue();
    }
}

?


1
为什么不对一些不同的解决方案进行基准测试,亲自看看呢? - Alexander R
1
如果你需要 Integer[] 而不是 int[],ArrayList 类中有一个内置的 toArray 方法(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#toArray())。如果你需要 int[],那么这个 toArray 可能不是最好的选择。 - Brian J
请查看Jon Skeet的答案:https://dev59.com/cXNA5IYBdhLWcg3wcNbF#960449 - Dungeon Hunter
如果你想要速度,就选择原始方法。 - huseyin tugrul buyukisik
2
如果你想要速度,改变语言! - thermz
注意空值。"Integer" 允许为空,但 "int" 不行。 - mabroukb
4个回答

5

最快的方法是一开始就不要使用ArrayList<Integer>。尝试使用包装了int[]的TIntArrayList,或者从一开始就使用int[]

如果由于某些原因必须使用ArrayList,而且无法解决它,那么您需要一种可行的方法,性能并不重要。

int[] ints = new int[list.size()];
for(int i=0, len = list.size(); i < len; i++)
   ints[i] = list.get(i);

1
OP提出了一个问题,该问题始于一个ArrayList<Integer>,在您的解决方案中,您没有考虑将ArrayList<Integer>转换为TIntArrayList所花费的时间。 - thermz
使用ArrayList的原因是我不知道它将包含多少元素,一旦我填充了ArrayList<Integer>,我需要一个副本以进一步加速。 - Sophie Sperner
TIntArrayList 可以是任意大小。你为什么需要一份副本? - Peter Lawrey
TIntArrayList是什么? - Sophie Sperner
2
http://trove4j.sourceforge.net/javadocs/gnu/trove/list/array/TIntArrayList.html 如果您不想包含额外的库,那么实现起来非常简单。 - Peter Lawrey

5

我认为您目前使用Java语言已经是最好的解决方案了。

不过,如果您使用Guava库,也许可以更简化代码。

public convert(List<Integer> list) {
 int[] ar = Ints.toArray(list); //Ints is the class from Guava library
}

2
public void convert(ArrayList<Integer> IntegerList) {
        int[] intArray = new int[IntegerList.size()];
        int count = 0;
        for(int i : IntegerList){
            intArray[count++] = i;
        }
 }

更新:问:foreach循环与常规for循环相比,速度/效率/区别是否更快/更好/不同?
答:请参考这里


我手头不知道答案,但是foreach循环和普通for循环有什么更快/更好/不同的地方吗?我认为它们是相同的,只是一种更容易编写的方式。 - Brian J
什么是“常规循环”?编辑:啊,我明白了,foreach循环相对于for循环的优势在于它可能使用迭代器而不是索引来访问列表,因此不依赖于列表以O(1)提供get(i)。请参见https://dev59.com/J3VD5IYBdhLWcg3wHnsX,了解foreach循环的工作原理。 - G. Bach
@BrianJ 这是你需要的链接:https://dev59.com/WnVC5IYBdhLWcg3wjx1d - Harmeet Singh

0
 Integer[] intArray = IntegerList.toArray(new Integer[IntegerList.size()]);

4
OP希望得到一个int[],而不是一个Integer[] - Jeffrey
你可以用Integer所能做的一切来代替int。这就是我发布它的原因。 - Pramod Kumar
除了不会影响性能的任意计算外,可以执行任何计算。 - Jeffrey

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