0
点赞
收藏
分享

微信扫一扫

遍历过程中的并发修改异常

_鱼与渔_ 2022-04-13 阅读 213
java

一.Java常见的集合遍历方式

1.for循环实现集合遍历

例:

String[] arr = {"Hello","World","Java"};  //定义集合对象,并进行初始化

for(int i=0;i<arr.length;i++)            //采用for循环实现对集合的遍历
{
    System.out.println(arr[i]);
}

2.iterator迭代器实现集合遍历

//这里只展示主函数中的内容,导包操作忽略不表

List<String> list = new ArrayList<String>();

list.add("Hello");
list.add("World");
list.add("Java");

Iterator it = list.iterator();
while(it.hasNext)
{
    String s = it.next();
    System.out.println(s);
}

3.ListIterator列表迭代器实现遍历操作

List<String> list = new ArrayList<String>();

list.add("Hello");
list.add("World");
list.add("Java");

ListIterator<String> it = list.listIterator();
while(it.hasNext())
{
    String s = it.next();
    System.out.println(s);
}

4.增强for循环

List<String> list = new ArrayList<String>();

list.add("Hello");
list.add("World");
list.add("Java");

for(String s : list)
{
    System.out.println(s);
}

二.并发修改异常

当使用Iterator实现集合遍历的途中进行其他插入删除操作,则会产生并发修改异常错误。

Exception in thread "main" java.util.ConcurrentModificationException
    at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)
    at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996)
    at Demo.main(Demo.java:17)

Iterator<String> it = list.iterator();
while(it.hasNext())
{
      String s = it.next();
      if(s.equals("World"))
        {
           list.add("Javase");
        }
      System.out.println(s);
}

//Exception in thread "main" java.util.ConcurrentModificationException
	at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)
	at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996)
	at Demo.main(Demo.java:17)

并发修改异常出现原因为:在采用迭代器进行集合遍历的过程中,如果进行数据元素的插入与删除操作,则迭代器无法明确此时集合中的数据元素个数,无法完成集合的迭代操作,因此产生并发修改异常。

并发修改异常解决办法:

1.采用for循环的方式

List<String> list = new ArrayList<String>();

list.add("Hello");
list.add("World");
list.add("Java");

for(int i=0;i<list.size();i++)
{
    String s = list.get(i);
    if(s.equals("World"))
    {
         list.add("Javase");
    }
    System.out.println(s);
}

2.采用LIstIterator列表迭代器

List<String> list = new ArrayList<String>();

list.add("Hello");
list.add("World");
list.add("Java");

ListIterator<String> it = list.listIterator();
while(it.hasNext())
{
      String s = it.next();
      if(s.equals("World"))
       {
          it.add("Javase");
       }
}

for(String s : list)
{
    System.out.println(s);
}
举报

相关推荐

0 条评论