问题描述:
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();
}
}
}
}
- 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
- 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
程序执行delete()方法,发生错误。

执行方法delete1()方法,则程序正确的返回:
allen
zq
- 1
- 2
- 1
- 2
所以,可以采用Iterator中的remove()方法来实现集合的一边删除一边遍历。