问题描述:
Java新手容易犯一个错误,就是遍历集合的同时删除集合的元素。那么程序会发生什么呢?下面举个小例子。
import java.util.HashSet;
import java.util.Iterator;
public class IterAndRemove {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("zq");
set.add("allen");
set.add("alex");
delete(set);
//delete1(set);
for(String s : set){
System.out.println(s);
}
}
public static void delete(HashSet<String> hashSet) {
for(String s : hashSet){
if(s.equals("alex")){
hashSet.remove(s);
}
}
}
public static void delete1(HashSet<String> hashSet) {
Iterator<String> iterator = hashSet.iterator();
while(iterator.hasNext()){
String s = iterator.next();
if(s.equals("alex")){
iterator.remove();
}
}
}
}
程序执行delete()方法,发生错误。
执行方法delete1()方法,则程序正确的返回:
allen
zq
所以,可以采用Iterator中的remove()方法来实现集合的一边删除一边遍历。
本文通过实例演示了在Java中遍历并删除集合元素时可能遇到的问题及解决方案。当直接使用增强for循环进行删除操作时会导致`ConcurrentModificationException`异常;而利用迭代器`Iterator`的`remove()`方法则能安全地完成一边遍历一边删除的操作。

被折叠的 条评论
为什么被折叠?



