Arrays.asList()方法产生的List 去操作reta

2020-10-12  本文已影响0人  JAVA弑云

背景是这样的,我在调用两个数据库查询方法.返回两个数组,数组里面每个元素都是int类型数据.需要对数组的数据进行交集处理,所以我就想当然去使用List.retainAll()方法.
首先需要将数组转成List.我这里使用了Arrays.asList()方法.
demo如下:

        List<Integer> integerList = Arrays.asList(3, 3, 5, 6, 7);
        List<Integer> integerList2 = Arrays.asList(3,5);
        integerList.retainAll(integerList2);
        System.out.println(integerList2);

test运行后报错:

Exception in thread "main" java.lang.UnsupportedOperationException: remove
    at java.base/java.util.Iterator.remove(Iterator.java:102)

点击报错的行数查看抛出错误的代码:

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

这个方法没有任何操作就直接抛出错误.
到这基本就毫无思路了,随即掏出百度大法,将报错信息一顿搜索,恍然大悟.
原来这个asList方法返回的实例类就不是java.util.ArrayList类,而是Arrays的内部类ArrayList.便开始debug.一看果然.


image.png

因为内部类没有去重写继承的remove()方法,会报错,而java.util.ArrayList类则重写了这个方法,所以不会报错.
找到问题了,自然就好解决了,将asList方法返回的List当做参数传入 java.util.ArrayList的构造方法,代码如下:

        List<Integer> integerList = new ArrayList(Arrays.asList(3, 3, 5, 6, 7));
        List<Integer> integerList2 = new ArrayList(Arrays.asList(3,5));
        integerList.retainAll(integerList2);
        System.out.println(integerList2);

问题解决.

总结

还是需要多看看java相关的api,源代码.认真debug,多踩坑,才能在以后避坑,还是需要不断的学习

上一篇下一篇

猜你喜欢

热点阅读