CurrentModificationException. alguém sabe o que é isso?

4 respostas Resolvido
javaarraylist
A
public void maker() {
	
	for(Object temp : memoria){   // memoria é um arraylist
		
		if(temp.ogc())
		{
			temp.jMake();
			temp.hMake();
		}
		else
		{
			memoria.remove(temp);
			temp = null;
		}
	}
}

estou com um problema nessa iteração. está dando um erro:

Exception in thread main java.util.ConcurrentModificationException

at java.util.ArrayList$Itr.checkForComodification(Unknown Source)

at java.util.ArrayList$Itr.next(Unknown Source)

4 Respostas

S

Você não pode alterar o conteúdo de uma coleção sendo iterada pelo enhanced for.
Ou você muda seu laço para um for tradicional ou então popula uma lista temporária com os elementos a serem removidos e após o enhanced for você os remove, dessa forma:

List<Object> removidos = new ArrayList<>();
for (Object temp : memoria) {
    if (temp.ogc()) {
        temp.jMake();
        temp.hMake();
    } else {
        removidos.add(temp); // adiciona temp à lista de objetos a remover
    }
}
memoria.removeAll(removidos); // fora do for, remove os elementos
A

hum… interessante. se eu colocar como parâmetro um arraylist ele remove do array principal todos os objetos contidos no auxiliar?

S
Solucao aceita

Se for algo mais ou menos assim:

public void meuMetodo(List<Tipo> principal) {
    List<Tipo> removidos = new ArrayList<>();
    for (Tipo temp : principal) {
        if (temp.ogc()) {
            temp.jMake();
            temp.hMake();
        } else {
            removidos.add(temp); // adiciona temp à lista de objetos a remover
        }
    }
    principal.removeAll(removidos); // fora do for, remove os elementos
}
A

certo. valeu staroski

Criado 15 de janeiro de 2017
Ultima resposta 16 de jan. de 2017
Respostas 4
Participantes 2