java.util.ConcurrentModificationException
2015-08-13 20:58
357 查看
ConcurrentModificationException
异常Log:Exception in thread "main" java.util.ConcurrentModificationException
产生异常的代码:
ArrayList al = new ArrayList(); // 1. 集合操作 al.add("java01"); al.add("java02"); al.add("java03"); // 2. 迭代器操作 Iterator it = al.iterator(); while(it.hasNext()) { // java.util.ConcurrentModificationException Object obj = it.next(); if (obj.equals("java02")) { // 1. 集合操作 al.remove("java02"); } }
原因:
操作元素的方法有两种:1. 集合 2. 迭代器
上面while循环的代码中同时使用了两种方法并发操作元素(使用Iterator查询元素,使用ArrayList删除元素),会产生安全隐患。Iterator不允许这样操作。
解决办法:
只用其中一种方式操作。
if (obj.equals("java02")) { it.remove(); }
如果想要其他的操作如添加、修改等,就需要使用其子接口,即ListIterator。 该接口只能通过List集合的listIterator()获取。
ArrayList al = new ArrayList(); al.add("java01"); al.add("java02"); al.add("java03"); ListIterator li = al.listIterator(); while(li.hasNext()) { Object obj = li.next(); if (obj.equals("java02")) { li.add("java09"); } } System.out.println("hasNext(): " + li.hasNext()); System.out.println("hasPrevious(): " + li.hasPrevious());
相关文章推荐
- Ruby中的集合编写指南
- Ruby中的异常处理代码编写示例
- AVG 7.5.1.43 版本 序列号 集合
- SQL Server游标的使用/关闭/释放/优化小结
- VBS ArrayList Class vbs中的数组类
- C#检查指定对象是否存在于ArrayList集合中的方法
- MySQL抛出Incorrect string value异常分析
- C#写入对象或集合类型数据到xml文件的方法
- C#中的集合用法分析
- C#中ArrayList的使用方法
- C#中Array与ArrayList用法及转换的方法
- JavaScript Archive Network 集合
- Backbone.js中的集合详解
- jQuery学习7 操作JavaScript对象和集合的函数
- 网页代码常用小技巧总结第1/3页
- 详解JavaScript中的异常处理方法
- java程序中的延时加载异常及解决方案
- 详解JAVA高质量代码之数组与集合
- 基于Java回顾之集合的总结概述
- 探讨:如何使用委托,匿名方法对集合进行万能排序