Listコレクションを巡回中に単一(複数)要素を削除(同時異常解決)


5サイズのリストセットが既に存在していると仮定する["1","2","3","4"]
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());

        }
    }