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去处理数据
网友评论