将 int[] 转换为 ArrayList

2022-09-04 05:39:50

将数组元素重新复制到 ?int[]ArrayList

我需要快速完成此操作,那么最快的方法是什么?


答案 1

ArrayList 不是 int 等基元的最佳存储。ArrayList 存储的对象不是基元。有一些库可用于具有基元的列表。如果您真的想将所有基元存储为一个对象,则必须使用它们逐个转换(因此在不需要时不会创建额外的Integed实例)。intIntegerInteger.valueOf(...)

虽然你可以这样做:

List<Integer> list = Arrays.asList(1, 2, 3);

您不能这样做:

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

因为数组实际上是一个对象,当使用诸如int之类的基元时,在var-args中也被视为对象。对象数组的工作原理是:

List<Object> list = Arrays.asList(new Object[2]);

因此,大致如下:

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

答案 2

使用 Arrays#asList(T... a) 创建“由指定数组支持的固定大小列表。(对返回列表的更改“直写”到数组。

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

或者,将两种数据结构解耦:

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

for (int i=0; i<intArray.length; i++)
{
    intList.add(intArray[i]);
}

或者更简洁地说:

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