Java集合遇到的坑

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笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,552评论 0 3
  • 传送门 解读阿里Java开发手册(v1.1.1) - 异常日志 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 4,417评论 4 50
  • 概述 Java集合框架由Java类库的一系列接口、抽象类以及具体实现类组成。我们这里所说的集合就是把一组对象组织到...
    absfree阅读 1,309评论 0 10
  • 来源与:阿里云栖 禁止用于商业用途 ps:如果需要电子书 评论你们邮箱 我会发给你们 下面感觉还是有点乱 目录 一...
    小向资源网阅读 7,714评论 0 12
  • 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:V...
    Oneisall_81a5阅读 911评论 0 11