Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换ArrayList的最快方法<;整数>;转换为int[]_Java_Arrays_Arraylist_Int - Fatal编程技术网

Java 转换ArrayList的最快方法<;整数>;转换为int[]

Java 转换ArrayList的最快方法<;整数>;转换为int[],java,arrays,arraylist,int,Java,Arrays,Arraylist,Int,可能重复: 在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(); } } publ

可能重复:

在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();
    }
}
public转换(ArrayList IntegerList){
int s=IntegerList.size();
int[]intArray=新的int[s];
对于(int i=0;i

最快的方法是首先不要使用
ArrayList
。尝试包装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);
int[]ints=newint[list.size()];
for(int i=0,len=list.size();i
公共无效转换(ArrayList IntegerList){
int[]intArray=new int[IntegerList.size()];
整数计数=0;
for(int i:整数列表){
intArray[count++]=i;
}
}
更新:Q.但是foreach循环比常规for循环更快/更好/不同吗?

答:

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

public convert(List<Integer> list) {
 int[] ar = Ints.toArray(list); //Ints is the class from Guava library
}
公共转换(列表){
int[]ar=Ints.toArray(list);//Ints是Guava库中的类
}

为什么不测试一些不同的解决方案并亲自查看呢?如果您想要
整数[]
而不是
整数[]
,ArrayList有一个内置的
toArray
()方法。如果您需要
int[]
,那么这个
toArray
可能不是您的最佳选择。如果您想要速度,请查看jon skeets答案,如果您想要速度更改语言,请使用原语!OP寻找的是
int[]
,而不是
Integer[]
。你可以用Integer做任何事情,就像用int做任何事情一样。这就是为什么我发布了itExcept,它可以在不损失性能的情况下执行任意计算。我现在不知道答案,但foreach循环是否比常规for循环更快/更好/不同?我认为这是同一件事,用一种更简单的方法来写。什么是“常规循环”?编辑:啊,我明白了,foreach-over-for循环的优点是它可能使用迭代器而不是索引来访问列表,因此不依赖于O(1)中提供get(I)的列表。看看foreach循环是如何工作的。@BrianJ在这里@G.Bach谢谢你提供的信息@谢谢你提供的信息!OP用“<代码> > ARARYLISTAB/CODE >提出问题,在您的解决方案中,您不考虑花费时间来将<代码> ARARYLIST/<代码>转换为<代码> TIntArrayList < /Cord>。在开始时使用ARARYLIST的原因是,一旦我填写了AARAYLIST,就不知道它将包含多少元素。我需要一份副本以进一步加速。TIntArrayList可以是任何大小。为什么您需要一份副本?什么是
TIntArrayList
?如果您不想包含一个额外的库,那么实现它就很简单了。
public void convert(ArrayList<Integer> IntegerList) {
        int[] intArray = new int[IntegerList.size()];
        int count = 0;
        for(int i : IntegerList){
            intArray[count++] = i;
        }
 }
public convert(List<Integer> list) {
 int[] ar = Ints.toArray(list); //Ints is the class from Guava library
}