数组转换成List(四种方式):
- Arrays.asList(T… a)
- ArrayList list1 = new ArrayList<>(Arrays.asList(T… a))
- Collections.addAll(Collection<? super T> c, T… elements)
- 使用java8的Stream
Integer[] array={
1,2,3,4};
//输出[1,2,3,4] 生成的List不可修改
List<Integer> list = Arrays.asList(array);
//输出[1,2,3,4] 生成的List可修改
ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(array));
List<Integer> list2=new ArrayList<>();
Collections.addAll(list2,array);
注意:数组类型不能为基础类型
第一、二两种方式的区别:
- 通过Arrays.asList()方式生成的List不可修改,此时生成的ArrayList不是java.util包下的ArrayList类对象,而是Arrays类的内部类ArrayList,虽然内部类ArrayList也继承AbtractList类,但没有重写AbtractList中修改集合的方法,而AbtractList修改集合的方法则默认抛出UnsupportedOperationException异常,所以此时对List做修改则会抛出UnsupportedOperationException异常。
- 通过第二种方式生成的ArrayList是java.util包下的ArrayList类,而该类重写了父类AbtractList中对集合修改的方法,故可对list元素进行修改。
相关源码如下:
Arrays.toList源码:
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
/**
* @serial include
*/
private static class ArrayList<E> extends AbstractList