字符串数组转成list的三种方案

str = "google";
//第一种:将字符串用split转成String数组,用Collections的addAll方法添加全部元素到list;
String[] arr = str.split("");
ArrayList list3 = new ArrayList();
Collections.addAll(list3, arr);

//第二种,Arrays.asList();
//这种方法只能返回一个视图,不能操作,只能查看
List list4 = new ArrayList();
list4 = Arrays.asList(arr);
//第二种的解决方案
List list5 = new ArrayList(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 list = Arrays.asList(array);
        List arrList = new ArrayList(list);
        arrList.add("6");
    }
}

你可能感兴趣的:(java基础)