给定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 = ???;
当前回答
如果数组是基元类型,则给定的答案将不起作用。但自从Java 8以来,您可以使用:
int[] array = new int[5];
Arrays.stream(array).boxed().collect(Collectors.toList());
其他回答
如果您使用:
new ArrayList<T>(Arrays.asList(myArray));
您可以创建并填写两个列表!在一个大列表中填充两次正是您不想做的,因为每次需要扩展容量时,它都会创建另一个Object[]数组。
幸运的是,JDK实现速度很快,Arrays.asList(a[])做得很好。它创建一种名为Arrays.ArrayList的ArrayList,其中Object[]数据直接指向数组。
// in Arrays
@SafeVarargs
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
//still in Arrays, creating a private unseen class
private static class ArrayList<E>
private final E[] a;
ArrayList(E[] array) {
a = array; // you point to the previous array
}
....
}
危险的一面是,如果更改初始数组,则会更改列表!你确定你想要吗?也许是,也许不是。
如果不是,最容易理解的方法是这样做:
ArrayList<Element> list = new ArrayList<Element>(myArray.length); // you know the initial capacity
for (Element element : myArray) {
list.add(element);
}
或者如@glglgl所述,您可以创建另一个独立的ArrayList:
new ArrayList<T>(Arrays.asList(myArray));
我喜欢使用集合、数组或番石榴。但如果它不合适,或者你感觉不到,就写另一行不雅的行。
生成ArrayList<Element>类型列表的lambda表达式(1) 没有未检查的强制转换(2) 而不创建第二个列表(使用例如asList())
ArrayList<Element>list=Stream.of(array).collector(Collectors.toCollection(ArrayList::new));
您可能只需要一个List,而不是ArrayList。在这种情况下,您只需执行以下操作:
List<Element> arraylist = Arrays.asList(array);
如果我们看到Arrays.asList()方法的定义,您将得到如下结果:public static<T>List<T>asList(T…a)//varargs为T类型。因此,您可以这样初始化arraylist:List<Element>arraylist=Arrays.asList(新元素(1),新元素(2),新元素元素(3));注意:每个新元素(int args)将被视为单个对象,并可以作为var args传递。这个问题也可能有另一个答案。如果您看到java.util.Collections.addAll()方法的声明,您将得到如下结果:public static<T>boolean addAll(集合<?super T>c,T…a);因此,这段代码也很有用Collections.addAll(arraylist,array);
另一个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);
}
}
输出是。。。你好世界