Método: Add Erro: java.util.ConcurrentModificationException

2 respostas
T

Olá.

Pesquisei sobre o tema no fórum e percebi que este tipo de erro é gerado quando a estrutura é percorrida pelo iterator e é feito alguma operação de add ou remove, mas não achei sobre este erro fora de um laço.
Descomente a linha e veja o erro.

import java.util.ArrayList;
import java.util.List;

public class VaiDarPau {

	private void adiciona(List<String> lista) {

		int meio = lista.size() / 2;

        List<String> l1 = new ArrayList<String>();
        l1 = lista.subList(0, meio);

        List<String> l2 = new ArrayList<String>();
        l2 = lista.subList(meio, lista.size());

        l1.add(l2.get(0));
        //l1.add(l2.get(1)); //descomente essa linha, compile e execute
    }

    public static void main(String args[]) {
    	
    	VaiDarPau deuPau = new VaiDarPau();
    	List<String> lista = new ArrayList<String>();
    	
    	lista.add("A");
		lista.add("B");
		lista.add("C");
		lista.add("D");

		deuPau.adiciona(lista);
    }
}

2 Respostas

rmendes08

Esse erro acontece porque o método sublist não cria uma lista nova, ele retorna apenas uma referência de um proxy para a lista original. Tente fazer assim:

List<String> l1 = new ArrayList<String>();  
        l1 = l1.addAll( lista.subList(0, meio) );  
  
        List<String> l2 = new ArrayList<String>();  
        l2 = l2.addAll( lista.subList(meio, lista.size()) );
T

Eu tinha chegado nessa solução e gostaria de entender melhor o problema.
Não sei o que é referência de um proxy e também não entendo porque consegue adicionar um elemento e no seguinte da erro no código que postei.

Criado 26 de fevereiro de 2012
Ultima resposta 27 de fev. de 2012
Respostas 2
Participantes 2