给定Element[]类型的数组:
Element[] array = {new Element(1), new Element(2), new Element(3)};
如何将此数组转换为ArrayList<Element>类型的对象?
ArrayList<Element> arrayList = ???;
给定Element[]类型的数组:
Element[] array = {new Element(1), new Element(2), new Element(3)};
如何将此数组转换为ArrayList<Element>类型的对象?
ArrayList<Element> arrayList = ???;
当前回答
您可以使用Cactos创建ArrayList(我是开发人员之一):
List<String> names = new StickyList<>(
"Scott Fitzgerald", "Fyodor Dostoyevsky"
);
不能保证该对象实际上是ArrayList类。如果您需要该担保,请执行以下操作:
ArrayList<String> list = new ArrayList<>(
new StickyList<>(
"Scott Fitzgerald", "Fyodor Dostoyevsky"
)
);
其他回答
Java 9
在Java9中,可以使用List.of静态工厂方法来创建List文本。类似以下内容:
List<Element> elements = List.of(new Element(1), new Element(2), new Element(3));
这将返回一个包含三个元素的不可变列表。如果需要可变列表,请将该列表传递给ArrayList构造函数:
new ArrayList<>(List.of(// elements vararg))
JEP 269:便利工厂收集方法
JEP269为Java集合API提供了一些方便的工厂方法。这些不可变的静态工厂方法内置在Java9和更高版本的List、Set和Map接口中。
new ArrayList<>(Arrays.asList(array));
对于正常大小的数组,上面的答案是正确的。如果您有巨大的数组大小并使用java8,您可以使用流来实现。
Element[] array = {new Element(1), new Element(2), new Element(3)};
List<Element> list = Arrays.stream(array).collect(Collectors.toList());
new ArrayList<T>(Arrays.asList(myArray));
确保myArray的类型与T相同。例如,如果尝试从int数组创建List<Integer>,则会出现编译器错误。
在创建大量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注释,是否存在标准或最佳实践?。