java.util.ConcurrentModificationException 解决办法(使用迭代器时出现异常)
来源:互联网 发布:淘宝卖家ipad客户端 编辑:程序博客网 时间:2024/05/16 15:51
在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。
则使用会报以下异常:
Java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$KeyIterator.next(HashMap.java:828)
解决办法(单线程):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// 1 使用Iterator提供的remove方法,用于删除当前元素
for
(Iterator<string> it = myList.iterator(); it.hasNext();) {
String value = it.next();
if
(value.equals(
"3"
)) {
it.remove();
// ok
}
}
System. out.println(
"List Value:"
+ myList.toString());
// 2 建一个集合,记录需要删除的元素,之后统一删除
List<string> templist =
new
ArrayList<string>();
for
(String value : myList) {
if
(value.equals(
"3"
)) {
templist.remove(value);
}
}
// 可以查看removeAll源码,其中使用Iterator进行遍历
myList.removeAll(templist);
System. out.println(
"List Value:"
+ myList.toString());
// 3. 使用线程安全CopyOnWriteArrayList进行删除操作
List<string> myList =
new
CopyOnWriteArrayList<string>();
myList.add(
"1"
);
myList.add(
"2"
);
myList.add(
"3"
);
myList.add(
"4"
);
myList.add(
"5"
);
Iterator<string> it = myList.iterator();
while
(it.hasNext()) {
String value = it.next();
if
(value.equals(
"3"
)) {
myList.remove(
"4"
);
myList.add(
"6"
);
myList.add(
"7"
);
}
}
System. out.println(
"List Value:"
+ myList.toString());
// 4. 不使用Iterator进行遍历,需要注意的是自己保证索引正常
for
(
int
i =
0
; i < myList.size(); i++) {
String value = myList.get(i);
System. out.println(
"List Value:"
+ value);
if
(value.equals(
"3"
)) {
myList.remove(value);
// ok
i--;
// 因为位置发生改变,所以必须修改i的位置
}
}
System. out.println(
"List Value:"
+ myList.toString());</string></string></string></string></string></string>
0 0
- java.util.ConcurrentModificationException 解决办法(使用迭代器时出现异常)
- java.util.ConcurrentModificationException 异常解决办法及原理(顶)
- java.util.ConcurrentModificationException异常的解决办法
- 主题:java.util.ConcurrentModificationException 异常解决办法
- java.util.ConcurrentModificationException 异常解决办法及原理
- 为什么会出现 java.util.ConcurrentModificationException 异常?
- 为什么会出现 java.util.ConcurrentModificationException 异常?
- 为什么会出现 java.util.ConcurrentModificationException 异常?
- 为什么会出现 java.util.ConcurrentModificationException 异常?
- 出现 java.util.ConcurrentModificationException 时的解决办法
- 出现 java.util.ConcurrentModificationException 时的解决办法
- 出现 java.util.ConcurrentModificationException 时的解决办法
- 【ConcurrentModificationException】java.util.ConcurrentModificationException 解决办法
- 异常:java.util.ConcurrentModificationException
- java.util.ConcurrentModificationException异常
- java.util.ConcurrentModificationException异常
- java.util.ConcurrentModificationException 异常
- 异常:java.util.ConcurrentModificationException
- 数据库索引的实现原理
- 将linux文件中的tab更换为空格的三种方法2010-08-09 15:50:36
- Spring定时任务的几种实现
- 补2
- HTML5 文件上传的2种方式
- java.util.ConcurrentModificationException 解决办法(使用迭代器时出现异常)
- Java利用QR Code生成二维码(二)
- SNTP以win7为服务器的配置
- 一个单链表,将末节点插入到第一个节点后面,并且删除末节点。
- 关于Tomcat单独运行和在eclipse下运行时路径的问题
- Fingerprint CtsOsTestCases fail
- PAT1016. 部分A+B (15)
- 【机器学习】浅谈聚类算法
- SpringMvc国际化