str = "google"; //第一种:将字符串用split转成String数组,用Collections的addAll方法添加全部元素到list; String[] arr = str.split(""); ArrayList<String> list3 = new ArrayList<String>(); Collections.addAll(list3, arr); //第二种,Arrays.asList(); //这种方法只能返回一个视图,不能操作,只能查看 List<String> list4 = new ArrayList<String>(); list4 = Arrays.asList(arr); //第二种的解决方案 List<String> list5 = new ArrayList<String>(Arrays.asList(arr));
第二种方法行不通的原因:
在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题,并写测试程序如下。
发生问题的原因如下:
调用Arrays.asList()生产的List的add、remove方法时报异常,Arrays.asList() 返回Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。
敲黑板!!
java.util.ArrayList重写了这些方法而Arrays的内部类ArrayList没有重写,所以会抛出异常。解决方法如下:
public class ListTest {
public static void main(String[] args) {
String[] array = {"1","2","3","4","5"};
List<String> list = Arrays.asList(array);
List arrList = new ArrayList(list);
arrList.add("6");
}
}