集合
Arrays
Arrays.asList
Arrays.asList是将对象数组或单个对象转为List,下面是ArrayList的代码
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
可以看到是将数组转为ArrayList,但是需要注意的是asList方法返回的ArrayList不是java.util的ArrayList,而是Arrays自己实现的一个List
可以看下Arrays的ArrayList具体的实现
里面并没有实现add和remove方法,所以如果使用add和remove方法就会抛出UnsupportedOperationException异常
同样的问题在调用java.util包下的Collections.emptyList方法时也会出现
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
可以用下面的方法解决问题
public static void main(String[] args) {
String[] str = {"李四", "王五"};
// 1. 使用Collections.addAll方法替换Arrays.asList
ArrayList<Object> arrayList = new ArrayList<>();
Collections.addAll(arrayList, str);
arrayList.add("赵大");
System.out.println("Arrays.toString(arrayList.toArray()) = " + Arrays.toString(arrayList.toArray()));
// 2.使用Arrays.asList方法后再转为java.util包下的ArrayList避免add(异常)
List<String> list = new ArrayList<>(Arrays.asList(str));
list.add("赵大");
System.out.println("Arrays.toString(list.toArray()) = " + Arrays.toString(list.toArray()));
}