关于泛型:将int []转换为List< Integer>的最佳方法

The best way to transform int[] to List<Integer> in Java?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to create ArrayList (ArrayList) from array (T[]) in Java

如何实现此方法:

1
2
3
4
List<Integer> toList(int[] integers) {
    ???
    //return Arrays.asList(integers); doesn't work
}


可能有一种内置的方法可以在某个地方实现它*(如您所注意到的,Arrays.asList不会像预期的那样工作,因为它期望的是Integer[],而不是int[]

我不太熟悉Java库,告诉你在哪里。但写自己的东西很简单:

1
2
3
4
5
6
7
public static List<Integer> createList(int[] array) {
    List<Integer> list = new ArrayList<Integer>(array.length);
    for (int i = 0; i < array.length; ++i) {
        list.add(array[i]);
    }
    return list;
}

显然,这样做的一个缺点是,你不能一般地这样做。您必须为所需的每个自动盒基元类型编写一个单独的createList方法。

如果没有,我真的很想知道为什么没有。


使用commons-lang3 org.apache.commons.lang3.ArrayUtils.toObject(),然后使用java.util.Arrays.asList(<>)

ArrayUtils.toObject()将复制数组,Array.asList()将简单地创建由新数组支持的列表。

1
2
int[] a = {1, 2, 3};
List<Integer> aI = Arrays.asList(ArrayUtils.toObject(a));

编辑:如果你想通过列表界面添加新的元素(调整大小),这是不起作用的,如果你想添加新的元素,你可以使用new ArrayList(),但这将创建一个副本。


1
2
3
4
5
6
7
8
9
10
11
List<Integer> asList(final int[] integers) {
    return new AbstractList<Integer>() {
        public Integer get(int index) {
            return integers[index];
        }

        public int size() {
            return integers.length;
        }
    };
}


1
2
3
4
5
6
7
8
9
10
11
12
List<Integer> toList(int[] integers) {
    // Initialize result's size to length of the incoming array
    // this way it will not require reallocations
    ArrayList<Integer> result = new ArrayList<Integer>( integers.length );

    for ( int cur: integers )
    {
        result.add( Integer.valueOf( cur ) );
    }

    return result;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;

public class Listing {
  public static void main(String[] args) {

   int[] integers = {1,2,3,4};

   java.util.List<Integer> list = new ArrayList<Integer>();
  for (int i=0; i< integers.length; i++)
  {
      list.add(integers[i]);
  }
  System.out.println(list);
}
}

测试并按预期工作!


不幸的是,我认为没有一种快速的方法可以做到这一点。我相信您必须迭代数组并逐个添加它。