将一个数组转换成一个列表时,之前一直是这样做的:
String[] array = {"aa","bb","cc"};
List<String> list = Arrays.asList(array);
这样可以成功转换为list,但是在删除list中的元素时会报错。
但是如果像下面这样转换就能够成功删除元素:
List<String> list = new ArrayList<>(Arrays.asList(array));
仔细看第一种情况,进入到Arrays.asList()方法里面,返回的是Arrays的私有静态类,而不是java.util.ArrayList类,java.util.Arrays.ArrayList类有set()、get()、contains()方法,但是没有增加元素、删除元素的方法,所以它的大小是固定的。下面是Arrays.asList()的具体代码:
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}