java - list 报java.lang.UnsupportedOperationException

情景

现在有个数组,比如:String[]  array = new String[]{"1","2","3"};

我们想要往这个数组中添加或删除元素。

思路

我们知道,数组是没有add,remote这些method的。

所以我们需要将数组转换为list集合,list有这些功能啊,操作完之后,再将list转换为数组即可。没毛病!!

操作

public class test {
    public static void main(String[] args) {
        String[]  array = new String[]{"1","2","3"};
        List<String> list1 = Arrays.asList(array);
        // 我们想要的操作
        list1.add("4");
        list1.remove("1");
        // 操作结束后,再转为数组
        Object[] array2 = list1.toArray();
        for(Object a: array2) {
            System.out.println(a);
        }
        
    }
}

这段代码,看着没毛病。运行~~~

在list1.add("4"); 这一步就报错了。不支持这个操作。同样,remove也不支持咯。

原因

Arrays.asList(String[])这种方式只能转为Arrays$ArrayList类,Arrays$ArrayList和ArrayList都是继承AbstractList,AbstractList类是不操作remove,add等method的,所以Arrays$ArrayList 也就不支持这些方法,默认throw UnsupportedOperationExceptiony异常。而ArrayList重写了remove,add等method,所以可以使用这些方法。

修改

 1 public class test {
 2     public static void main(String[] args) {
 3         String[]  array = new String[]{"1","2","3"};
 4         List<String> list1 = Arrays.asList(array);
 5         List<String> list2 = new ArrayList<String>(list1);
 6         // 我们想要的操作
 7         list2.add("4");
 8         list2.remove("1");
 9         // 操作结束后,再转为数组
10         Object[] array2 = list2.toArray();
11         for(Object a: array2) {
12             System.out.println(a);
13         }
14         
15     }
16 }

我们需要将Arrays$ArrayList类转换为ArrayList类,再来进行操作。结束之后,转为数组。查看结果

 

 两个操作都成功了!

 

posted @ 2019-03-08 16:52  风雨渡客  阅读(1205)  评论(0编辑  收藏  举报