Java集合中ArrayList遍历迭代器异常相关问题的分析和解决

项目场景:

项目场景:迭代器异常问题


问题描述:

当使用迭代器来遍历集合时,在集合进行元素的添加,会出现迭代器异常的现象

List list = new ArrayList<>();
        list.add("曹操");
        list.add("貂蝉");
Iterator it = list.iterator();
        while (it.hasNext()){
    
    
            if (it.next().equals("貂蝉")){
    
    
                list.add("吕布");
            }
        }
        System.out.println(list);
    }

在这里插入图片描述


原因分析:

在迭代器的情况下往集合中添加或者是删除元素都会导致集合的长度发生改变,从而导致源代码中的判断出现错误,从而导致报错,但是如果进行元素的修改就不会发生报错,因为修改元素并不会导致集合的长度发生改变。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


解决方案:

在迭代器中,不要使迭代器所遍历的那个集合发生长度的改变。如果需要通过遍历中的某些条件来导致集合的长度发生改变的话,我们可以先把原来的集合放在一个新的集合中,通过原来集合的遍历条件来使新集合来进行长度的改变,这样就不会导致迭代器报错的问题。
例如:

List list = new ArrayList<>();
         list.add("曹操");
         list.add("貂蝉");
List list1 = new ArrayList<>();
		 list1.add("曹操");
         list1.add("貂蝉");
Iterator it = list.iterator();
        while (it.hasNext()){
    
    
            if (it.next().equals("貂蝉")){
    
    
                list1.add("吕布");
            }
        }
        System.out.println(list1);
    }

猜你喜欢

转载自blog.csdn.net/StruggleBamboo/article/details/111565587