1,一般情况下,可使用 iterator 在遍历list、set的同时删除其中的某些元素,例如:
Iterator<String> it = collection.iterator();while (it.hasNext()) {
String str = it.next();
if (......) {
it.remove();
// System.out.print(collection);
}
}
2,而 ~~ 有递归时,如下:
对于List:
public void recursiveFunc(ArrayList<String> wordList) {
System.out.println(wordList);
Iterator<String> it = wordList.iterator();
while (it.hasNext()) {
String s = it.next();
if(......){
it.remove();
recursiveFunc(wordList); //把删除某元素之后的 list 当参数传进行递归时,没有任何问题
}
}
}
对于Set:
System.out.print(set);
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String s = it.next();
if(......){
it.remove();
recursiveFunc(set); // 把删除某元素之后的 set当参数传进行递归时,就会报错ConcurrentModificationException
}
}
}
——需要注意一下,
解决方法:new一个set,把remove()某元素之后的数据集copy到new出来的set中当 递归 参数。