给定Element[]类型的数组:

Element[] array = {new Element(1), new Element(2), new Element(3)};

如何将此数组转换为ArrayList<Element>类型的对象?

ArrayList<Element> arrayList = ???;

当前回答

在创建大量ArrayList并需要简洁语法时,我使用了以下helper方法:

import java.util.ArrayList;
import java.util.Arrays;

class Main {

    @SafeVarargs
    public static <T> ArrayList<T> AL(T ...a) {
        return new ArrayList<T>(Arrays.asList(a));
    }

    public static void main(String[] args) {
        var al = AL(AL(1, 2, 3, 4), AL(AL(5, 6, 7), AL(8, 9)));
        System.out.println(al); // => [[1, 2, 3, 4], [[5, 6, 7], [8, 9]]]
    }
}

Guava使用相同的方法,因此@SafeVarargs在这里看起来很安全。另请参阅Java SafeVarargs注释,是否存在标准或最佳实践?。

其他回答

由于这个问题很古老,所以我很惊讶,还没有人提出最简单的形式:

List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));

从Java5开始,Arrays.asList()采用varargs参数,不必显式构造数组。

使用以下代码

Element[] array = {new Element(1), new Element(2), new Element(3)};
ArrayList<Element> list = (ArrayList) Arrays.asList(array);

您可能只需要一个List,而不是ArrayList。在这种情况下,您只需执行以下操作:

List<Element> arraylist = Arrays.asList(array);
new ArrayList<T>(Arrays.asList(myArray));

确保myArray的类型与T相同。例如,如果尝试从int数组创建List<Integer>,则会出现编译器错误。

另一个Java8解决方案(我可能错过了大量的答案。如果是,我很抱歉)。这将创建一个ArrayList(与List相反),即可以删除元素

package package org.something.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Junk {

    static <T> ArrayList<T>  arrToArrayList(T[] arr){
        return Arrays.asList(arr)
            .stream()
            .collect(Collectors.toCollection(ArrayList::new));
    }

    public static void main(String[] args) {
        String[] sArr = new String[]{"Hello", "cruel", "world"};
        List<String> ret = arrToArrayList(sArr);
        // Verify one can remove an item and print list to verify so
        ret.remove(1);
        ret.stream()
            .forEach(System.out::println);
    }
}

输出是。。。你好世界