今天在写一个Array转换为List的Demo的时候遇到了一个问题:
String [] str = {"a","b","c"};
List<String> list2 = Arrays.asList(str);
list2.add("ddd");
System.out.println(list2);
最开始我是这样写的,发现list无法进行add,remove等操作
改进:
String [] str = {"a","b","c"};
List<String> list = new ArrayList<>( Arrays.asList(str));
list.add("ddd");
System.out.println(list);
原因:
Arrays.asList()方法返回的对象是Arrays的内部类,对list的操作仍然反映在原数组上,因此这个list是定长的,不支持add、remove操作;
这个ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList
它是Arrays类自己定义的一个静态内部类,这个内部类没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法。
而AbstractList中的add()和remove()是直接抛出java.lang.UnsupportedOperationException异常的!