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

Posted

技术标签:

【中文标题】将 ArrayList<Integer> 转换为 int[] 的最快方法 [重复]【英文标题】:Fastest way to convert ArrayList<Integer> into int[] [duplicate] 【发布时间】:2012-08-10 18:10:39 【问题描述】:

可能重复:How to convert List<Integer> to int[] in Java?

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

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

?

【问题讨论】:

您为什么不对一些不同的解决方案进行基准测试并亲自看看? 如果你想要Integer[] 而不是int[],ArrayList 有一个内置的toArray(docs.oracle.com/javase/6/docs/api/java/util/…) 方法。如果您需要int[],那么这个toArray 可能不是您的最佳选择。 查看 jon skeets 的回答 ***.com/a/960449/639891 如果你想要速度,就去原始 如果你想快速改变语言! 【参考方案1】:
 Integer[] intArray = IntegerList.toArray(new Integer[IntegerList.size()]);

【讨论】:

OP 正在寻找int[],而不是Integer[] 你可以用 Integer 做所有你可以用 int 做的事情。这就是我发布它的原因 除非在不损失性能的情况下执行任意计算。【参考方案2】:

最快的方法是首先不使用ArrayList&lt;Integer&gt;。尝试包装 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);

【讨论】:

OP 以ArrayList&lt;Integer&gt; 开头提出问题,在您的解决方案中,您不考虑将ArrayList&lt;Integer&gt; 转换为TIntArrayList 所花费的时间。 一开始使用ArrayList的原因是我不知道它会包含多少元素,一旦我填写了ArrayList,我需要一个副本以进一步加速。 TIntArrayList 可以是任意大小。为什么需要副本? 什么是TIntArrayList trove4j.sourceforge.net/javadocs/gnu/trove/list/array/… 如果您不想包含额外的库,实现起来很简单。【参考方案3】:
public void convert(ArrayList<Integer> IntegerList) 
        int[] intArray = new int[IntegerList.size()];
        int count = 0;
        for(int i : IntegerList)
            intArray[count++] = i;
        
 

更新:问:foreach 循环是否比常规 for 循环更快/更好/不同? A.here

【讨论】:

我不知道答案,但是 foreach 循环是否比常规 for 循环更快/更好/不同?我以为是一样的东西,写起来更简单。 什么是“常规循环”?编辑:啊,我明白了,foreach 相对于 for 循环的优势在于它可能使用迭代器而不是索引来访问列表,因此不依赖于 O(1) 中提供 get(i) 的列表。请参阅 ***.com/questions/85190/… 了解 foreach 循环的工作原理。 @BrianJ 给你go @G.Bach 感谢您提供信息! @HarmeetSingh 感谢您提供信息!【参考方案4】:

我想不出比现在使用纯 java 更好的解决方案。 但是,如果您使用Guava,您可以简化它。

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

【讨论】:

以上是关于将 ArrayList<Integer> 转换为 int[] 的最快方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法将 ArrayList<Integer> 转换为 int[] [重复]

java如何将一个arraylist等量划分为5个新的arraylist集合?

Java - ArrayList<Integer>[][] 可能吗?

List<Integer>list =new ArrayList<Integer>(); <Integer> 啥意思?

ArrayList<Integer> 接受字符串

ArrayList <Integer> 与 get/remove 方法