为什么我在尝试打印两个arraylists时会遇到并发修改异常?

时间:2015-01-01 06:17:14

标签: java arraylist

我想使用两个条件打印两个arraylists的元素。但是在尝试实现它时我得到了Concurrent Modification异常。

我做错了什么?

public void Insert_Answers(Enumeration<String> ques, Enumeration<String> ans){

    try {

        while(ans.hasMoreElements()){
            String answer = ans.nextElement();

            System.out.println(answer);

           while(ques.hasMoreElements()){

               String question = ques.nextElement();
               System.out.println(question);

         }
        }
    } 
     catch (Exception ex) {
        Logger.getLogger(DbInsert.class.getName()).log(Level.SEVERE, null, ex);
    }
}

这是包含main方法的Test.java类

public class Test {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    DbInsert dbIns = new DbInsert();

    ArrayList<String> arr1 = new ArrayList<String>();
    arr1.add("a");
    arr1.add("b");
    arr1.add("c");
    arr1.add("d");
    Enumeration earr1 = Collections.enumeration(arr1);

    ArrayList<String> arr2 = new ArrayList<String>();
    arr2.add("e");
    arr1.add("f");
    arr1.add("g");
    arr1.add("h");
    Enumeration earr2 = Collections.enumeration(arr2);

    dbIns.Insert_Answers(earr1, earr2);
}

}

1 个答案:

答案 0 :(得分:6)

我的猜测是你在填充arr2

时输了一个错字
arr2.add("e");
arr1.add("f");
arr1.add("g");
arr1.add("h");

你可能意味着这些添加属于arr2

arr2.add("e");
arr2.add("f");
arr2.add("g");
arr2.add("h");

发生并发修改错误的原因是您在迭代进行过程中添加到支持列表。

我也不确定你使用Enumeration的原因。您应该使用Iterator代替。

Iterator<String> arr1Iter = arr1.iterator();

请参阅此另一个问题,了解为什么要使用Iterator:Difference between Java Enumeration and Iterator