有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在集合中迭代以添加项,但抛出ConcurrentModificationException

package com.ripal;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Iterator;

public class Outputs {

    public void show() {
        final ArrayList<String> list = new ArrayList<String>();

        list.add("banana");
        list.add("apple");

        Iterator<String> itr = list.iterator();

        Collections.sort(list);
        while (itr.hasNext()) {
            System.out.println(itr.next() + " ");
        }
    }
}

class Test {

    public static void main(String[] args) {
        Outputs outputs = new Outputs();
        outputs.show();
    }
}

共 (1) 个答案

  1. # 1 楼答案

    ArrayList有一个快速失败的迭代器。只能通过迭代器修改集合。在调用迭代器方法之后,会更快地检测到在外部进行的任何其他修改,并抛出ConcurrentModificationException。在您的例子中,在创建迭代器之后,您可以对数组进行适当的排序,排序例程会修改数组的内容,从而在使用迭代器时产生ConcurrentModificationException。要解决这个问题,只需在创建迭代器之前执行排序。下面是它的样子

    Collections.sort(list);
    Iterator<String> itr = list.iterator();