将int []转换为ArrayList

Str*_*boy 11 java arrays arraylist

int[]数组元素重新映射到的最佳方法是什么ArrayList

我需要快速做到这一点,那么最快的方法是什么?

Mat*_*der 19

ArrayList不是诸如int之类的基元的最佳存储.ArrayList存储对象而不是基元.有原型的列表库.如果您真的想将所有原语存储intInteger对象,则必须逐个使用它们进行转换Integer.valueOf(...)(因此在不需要时不要创建额外的Integer实例).

虽然你可以这样做:

List<Integer> list = Arrays.asList(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

你不能做这个:

int[] i = { 1, 2, 3 };
List<Integer> list = Arrays.asList(i); // this will get you List<int[]>
Run Code Online (Sandbox Code Playgroud)

因为数组实际上是一个对象,并且在使用诸如int之类的基元时也会在var-args中进行处理.对象数组有效:

List<Object> list = Arrays.asList(new Object[2]);
Run Code Online (Sandbox Code Playgroud)

所以有些东西:

int[] array = { 1, 2, 3 };
ArrayList<Integer> list = new ArrayList<Integer>(array.length);
for (int i = 0; i < array.length; i++)
  list.add(Integer.valueOf(array[i]));
Run Code Online (Sandbox Code Playgroud)

  • 自Java 1.5和autoboxing以来,您不再需要执行Integer.valueOf(). (3认同)

Mat*_*all 10

使用Arrays#asList(T... a)创建"受指定数组支持的固定大小的列表.(更改返回列表'写’到数组.)"

Integer[] intArray = {1, 2, 3, 42}; // cannot use int[] here
List<Integer> intList = Arrays.asList(intArray);
Run Code Online (Sandbox Code Playgroud)

或者,要解耦两个数据结构:

List<Integer> intList = new ArrayList<Integer>(intArray.length);

for (int i=0; i<intArray.length; i++)
{
    intList.add(intArray[i]);
}
Run Code Online (Sandbox Code Playgroud)

甚至更简洁:

List<Integer> intList = new ArrayList<Integer>(Arrays.asList(intArray));
Run Code Online (Sandbox Code Playgroud)

  • 嗯,是的,但问题是关于一个`int []`数组特别:)但当然OP可以跳过第一个样本,如果它不起作用他/她. (8认同)
  • Pulsar有一个观点:这不起作用,因为`Arrays.asList(intArray)`返回`List <int []>`.所以看来我们实际上必须在这里使用一个循环,或者我们能以某种方式将`int []`转换为`Integer []`数组? (5认同)

Lou*_*man 6

使用番石榴,你不需要打扰Integer[]:

int[] array;
List<Integer> list = Ints.asList(array);
Run Code Online (Sandbox Code Playgroud)

如果你想要一个ArrayList,那就是

List<Integer> list = Lists.newArrayList(Ints.asList(array));
Run Code Online (Sandbox Code Playgroud)

(披露:我向番石榴捐款.)

否则,如果你拥有的只是一个int[],你必须采用老式的方式:

int[] array;
List<Integer> list = new ArrayList<>(array.length);
for (int val : array) {
  list.add(val);
}
Run Code Online (Sandbox Code Playgroud)