java.util.ConcurrentModificationException-List集合并发修改异常

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hao");
        list.add("hello");
        for (String str : list) {
            if("hello".equals(str)){
                list.add("world");
            }
        }
        System.out.println(list);
    }

这段代码会抛出如下异常:

Exception in thread "main"  java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:907)
    at java.util.ArrayList$Itr.next(ArrayList.java:857)

出现问题的原因就是在遍历的同时去增加元素,所以出现了并发修改异常
解决方法:

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hao");
        list.add("hello");
        ListIterator<String> lit = list.listIterator();
        while (lit.hasNext()) {
            String next = lit.next();
            if ("hello".equals(next)) {
                lit.add("world");
            }
        }
        System.out.println(list);
    }

打印结果:

[hao, hello, world]

看下 ListIterator 中的方法:

add(E e): 将指定的元素插入列表,插入位置为迭代器当前位置之前
hasNext():以正向遍历列表时,如果列表迭代器后面还有元素,则返回 true,否则返回false
hasPrevious():如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false
next():返回列表中ListIterator指向位置后面的元素
nextIndex():返回列表中ListIterator所需位置后面元素的索引
previous():返回列表中ListIterator指向位置前面的元素
previousIndex():返回列表中ListIterator所需位置前面元素的索引
remove():从列表中删除next()或previous()返回的最后一个元素(有点拗口,意思就是对迭代器使用hasNext()方法时,删除ListIterator指向位置后面的元素;当对迭代器使用hasPrevious()方法时,删除ListIterator指向位置前面的元素)
set(E e):从列表中将next()或previous()返回的最后一个元素返回的最后一个元素更改为指定元素e

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。生活中很多数据的描述都采...
    佘大将军阅读 929评论 0赞 2
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,664评论 0赞 4
  • Iterator类 对 collection 进行迭代的迭代器 提供的方法: hasNext() 如果仍有元素可...
    MLLWF阅读 460评论 0赞 0
  • Java集合框架 Java中封装了许多常用的数据结构,称为集合框架,可以有效组织数据,提高程序性能。最初Java只...
    Steven1997阅读 1,172评论 0赞 2
  • Java 集合框架系列 Java 集合框架_开篇Java 集合框架_ListJava 集合框架_ArrayList...
    wo883721阅读 1,002评论 0赞 3

友情链接更多精彩内容