解决List的ConcurrentModificationException的几种方法
程序员文章站
2022-05-23 13:23:25
...
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { String codes = "HH|140402001>RQSPF=1+SPF=3,140402002>RQSPF=3+SPF=1|2*1"; Pattern p = Pattern.compile("(\\d{9})"); Matcher m = p.matcher(codes); Map<String, String> rqMap = new HashMap<String, String>(); List<String> itemList = new ArrayList<String>(); CopyOnWriteArrayList<String> currList = new CopyOnWriteArrayList<String>(itemList); // List<String> currList = Collections.synchronizedList(itemList); //报ConcurrentModificationException异常 while (m.find()) { // System.out.println(m.group()); itemList.add(matcher.group()); } for (String yhItem : currList) { //正确 String totalItem = xml.getStringValue("row[" + i + "].@close"); if (yhItem.equals(mid)) { rqMap.put(yhItem, totalItem); currList.remove(yhItem); } } // for (int j=0; j<itemList.size(); j++) { //正确 //或者使用 list.iterator 的remove() 或者使用CopyOnWriteArrayList,使用其它的方式可能会报ConcurrentModificationException异常 // String totalItem = xml.getStringValue("row[" + i + "].@close"); // String yhItem = itemList.get(j); // if (yhItem.equals(mid)) { // rqMap.put(yhItem, totalItem); // itemList.remove(j); // } // } // Iterator<String> iterator = itemList.iterator(); //正确 // while (iterator.hasNext()) { // String totalItem = xml.getStringValue("row[" + i + "].@close"); // String yhItem = iterator.next(); // if (yhItem.equals(mid)) { // rqMap.put(yhItem, totalItem); // iterator.remove(); // } // } // for (String yhItem : itemList) { //报ConcurrentModificationException异常 // String totalItem = xml.getStringValue("row[" + i + "].@close"); // if (yhItem.equals(mid)) { // rqMap.put(yhItem, totalItem); // int k = itemList.indexOf(yhItem); // itemList.remove(k); // } // } } }
详细源代码分析及原理摘自其它的博客:
http://arron-li.iteye.com/blog/645008
http://blog.csdn.net/aa4790139/article/details/6438869
http://www.cnblogs.com/yanghuahui/p/3365509.html
上一篇: 黑皮花生的营养价值你有多少了解
下一篇: 富顺豆花蘸水是什么?应该是可以吃的吧?
推荐阅读
-
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
-
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
-
js中Number数字数值运算后值不对的解决方法
-
php缩小png图片不损失透明色的解决方法
-
迅雷浏览器支持修复失败的可行解决方法
-
sublime text3的package control安装失效的解决方法(插件安装包管理)
-
360浏览器收藏夹打不开的3种解决方法
-
64位win7系统中iis7报80004005错误的解决方法
-
app store无法连接怎么回事?app store无法连接的解决方法
-
Mysql数据库从5.6.28版本升到8.0.11版本部署项目时遇到的问题及解决方法