Listコレクションを巡回中に単一(複数)要素を削除(同時異常解決)
2657 ワード
5サイズのリストセットが既に存在していると仮定する["1","2","3","4"]
私が今遍歴している間に指定した要素を削除したいのですが、普通のforループと強化forを使用すると異常が発生します.
Iteratorを使用してコレクションを操作してこそ、要素を正常に削除および遍歴できます.
public List init(){
list = new ArrayList();
list.add(" ");
list.add(" ");
list.add(" ");
list.add(" ");
return list;
}
私が今遍歴している間に指定した要素を削除したいのですが、普通のforループと強化forを使用すると異常が発生します.
// for " "
public void useForeachMove1(List l){
for(Object o : l){
if(" ".equals(o.toString())){
l.remove(o);
}
System.out.println(o);
}
}
result:
Exception in thread "main" java.util.ConcurrentModificationException
size,
// for , , size ,
public void useNormalForMove1(List l){
for(int i = 0;i < l.size();i++){
if(" ".equals(l.get(i))){
l.remove(i);
}
System.out.println(l.get(i));
}
}
result:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
Iteratorを使用してコレクションを操作してこそ、要素を正常に削除および遍歴できます.
public void useIteratorMove1(List l){
Iterator it = l.iterator();
while(it.hasNext()){
String str = it.next();
if(str.equals(" ")||str.equals(" ")){
it.remove();
}
System.out.println(it.next());
}
}