最近在项目中,用到了数组转集合。有个很方便的方法就是 Arrays.asList();但你可能不知道这样得到的List它的长度是不能改变的。
String[] abc = new String[] { "abc", "acd", "add" };
List<String> abcList = Arrays.asList(abc);
abcList.add("123");
没想到执行后却抛出了异常:
java.lang.UnsupportedOperationException
看看asList()方法是怎么实现的。
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
当你看到这段代码时可能觉得没啥问题啊,不就是返回了一个ArrayList对象吗?问题就出在这里。这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,显然它是Arrays类自己定义的一个内部类!这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!
解决方法:
String[] abc = new String[] { "abc", "acd", "add" };
List<String> abcList = new ArrayList<String>(Arrays.asList(abc));
abcList.add("123");
总结:如果你的List只是用来遍历,可以用Arrays.asList()!如果List还要涉及添加或删除元素,还是new一个java.util.ArrayList,然后一个一个的添加元素吧!