java - 我该如何修复此错误 java.util.ConcurrentModificationException

标签 java exception arrays concurrentmodification

我在下一行收到错误。 我正在做添加到 jsonarray 的过程。 请帮助我。

jsonArr=new JSONArray();
if(req.getSession().getAttribute("userses")!=null){
    String name=(req.getParameter("name")==null?"":to_EnglishName(req.getParameter("name").toUpperCase()));
    if(!name.equals("")){
        for(Book c:GlobalObjects.bookList){
            if(c.getBookName().startsWith(name)){
                    jsonObjec=new JSONObject();
                    jsonObjec.put("label",c.getBookName());
                    jsonObjec.put("value", c.getId());
                    jsonArr.add(jsonObjec);//java.util.ConcurrentModificationException
            }
        }
    }
}
jsonArr.write(res.getWriter());

最佳答案

这是我在重新编程时经常遇到的错误。此异常的原因或细节非常清楚。迭代时不允许修改集合(您正在添加新元素)。至少语法 for 不支持这样做。

要解决您的问题,有两种我认为很简单的方法。

1).与其使用 for 语句循环,更好的方法是使用迭代器来避免 ConcurrentModificationException。

    Iterator<Book> iterator = bookList.iterator();
    while(iterator.hasNext()){
      Book c = iterator.next();
      if(c.getBookName().startsWith(name)){
                jsonObjec=new JSONObject();
                jsonObjec.put("label",c.getBookName());
                jsonObjec.put("value", c.getId());
                jsonArr.add(jsonObjec);
        }
    }

2).在循环它时,不要添加它。

     List list = new ArrayList<>();
     for(Book c:GlobalObjects.bookList){
        if(c.getBookName().startsWith(name)){
                jsonObjec=new JSONObject();
                jsonObjec.put("label",c.getBookName());
                jsonObjec.put("value", c.getId());
                list.add(jsonObjec);//java.util.ConcurrentModificationException
        }
     }
     jsonArr.addAll(list);

关于java - 我该如何修复此错误 java.util.ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407621/

相关文章:

java - 如何设置评级栏可点击但不可缩放?

java - BufferedWriter write() 方法不起作用

c# - FileSystemWatcher 中的 FileNotFoundException

java - 如何从连接到 Android 设备的串行 GPS 获取数据?

java - 通过 View.OnClickListener() 传递 MainActivity 的对象

java - 线程中的异常 "main"java.lang.NullPointerException : While trying to the run the jar file

java - HtmlUnit获取页面源码实现显示Exception

c++ - 动态对象的动态数组

c - 无法运行此代码仍然没有显示错误?

javascript - .find() 多选器不能添加prop