java基础相关
Table of Contents generated with DocToc (opens new window)
# 使用foreach遍历元素,并在期间删除元素时
@Test
public void testError(){
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c", "d", "e", "f"));
for (String s : list) {
if (s.equals("c")){
list.remove(s);
System.out.println("删除了:"+s);
}
System.out.println("删除后的list:"+list);
}
System.out.println("list = " + list);
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
会出现:
原因是for each的底层其实也是用迭代器实现的,在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除,就会抛出 java.util.ConcurrentModificationException异常。
正确的方式应该是:直接使用iterator
@Test
public void testRight(){
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c", "d", "e", "f"));
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String s = iterator.next();
if (s.equals("c")){
iterator.remove();
System.out.println("删除了:"+s);
}
}
System.out.println("list = " + list);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
在 GitHub 上编辑此页 (opens new window)
最后更新: 2022/10/04, 16:10:00