java---集合ArrayList遍历并添加元素报错
集合ArrayList遍历并添加元素报错
案例:创建一个集合,存入两个元素,“曹操” “貂蝉” ,遍历集合,如果发现遍历的元素是貂蝉,就向集合中添加一个“吕布”
代码实现:
ArrayList<Object> list = new ArrayList<>(); list.add("曹操"); list.add("貂蝉"); for (int i = 0; i < list.size(); i++) { if (list.get(i).equals("貂蝉")){ list.add("吕布"); } System.out.println(list.get(i)); } //增强for循环遍历 for (Object o:list){ System.out.println(o); if (o.equals("貂蝉")){ list.add(1,"吕布"); } } Iterator it= list.iterator(); while (it.hasNext()){ if (it.equals("貂蝉")){ list.add("吕布"); } System.out.println(it.next()); }
可是在运行的时候,我们却发现报java.util.ConcurrentModificationException的错误 我们按住crtl点击进入Iteator的内部,选中它后使用菜单中的Navigate中的Type Hierarchy 因为集合变化次数自增了,而迭代器的变化次数并没有跟着变化,才会报错。 而修改元素,并没有使集合的变化次数进行自增,与迭代器的变化次数的一样的,所以不会报错。同理,删除元素时,集合的变化次数也跟着改变了,所以也会报错!
上一篇:
IDEA上Java项目控制台中文乱码