【问题标题】:Why I'm getting concurrent modification exception when trying to print two arraylists?为什么在尝试打印两个数组列表时出现并发修改异常?
【发布时间】:2015-02-27 23:46:59
【问题描述】:

我想使用两个 while 条件打印两个数组列表的元素。但是我在尝试实现时遇到并发修改异常。

我做错了什么?

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);
}

}

【问题讨论】:

  • 为什么你使用 Java 1.1 的风格 Enumerations 而不是更现代的 Iterators(更不用说增强的 for 循环)?
  • 枚举不允许修改集合,但您正在尝试更改 arr1

标签: java arraylist


【解决方案1】:

我猜你在填写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();

请参阅这个其他 SO 问题,了解为什么应该使用 Iterator 代替:Difference between Java Enumeration and Iterator

【讨论】:

  • 就是这样 :D 感谢您指出这一点。我对这一切不太熟悉,但只是想测试这种方式是否适用于 arraylist。将使用一个迭代器来实现。再次感谢您的建议:)
猜你喜欢
  • 2014-12-30
  • 2016-09-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多