美文网首页程序员
Java集合遇到的坑

Java集合遇到的坑

作者: MinuitZ | 来源:发表于2017-09-22 17:41 被阅读74次

    1. 集合List<Integer>在移除元素时会报数组越界异常或者移除不该移除的元素

    原因: 集合的移除元素可以使用remove函数 , 该函数接收两种参数:



    在该集合中移除元素时, 目标为Integer不会报错 , 但如果是整形的话 , 会造成歧义, 这时会调用remove(int index) , 造成数组越界等异常情况.

    解决办法:

    • 在移除是使用强制类型转换 , 变成包装类再进行移除
    • 直接使用List<String> , 简单粗暴(不推荐)

    2. 集合在移除元素时抛出了异常:UnsupportedOperationException

    这时候你肯定是在使用Arrrays.asList()方法生成集合时 , 调用改对象的add或者remove方法是抛出的.

    原因:
    使用Arrays.asList()生成的集合时Arrays中的ArrayList , 这并不是ArrayList ,如图所示:


    在图中我们发现ArrayList类继承AbstractList , 我们平时使用的ArrayList也继承自该类 ; AbstractList中确实定义了add和remove的方法 , 但区别就是:

    • ArrayList重写了add和remove方法 , 并且只会抛出IndexOutOfBoundsException的异常;
    • Arrays$ArrayList并没有重写add与remove , 所以调用的是父类的方法, 但父类的add与remove方法都直接返回了异常:

    因此 , 直接使用Arrays.asList()生成的对象的add与remove方法会抛出异常.
    解决方法

    • 将Arrays.ArrayList转为ArrayList
        List list = Arrays.asList(a[]);  
        List arrayList = new ArrayList(list);  
    
    • 直接使用ArrayList去处理数据

    相关文章

      网友评论

        本文标题:Java集合遇到的坑

        本文链接:https://www.haomeiwen.com/subject/ttbfextx.html