Duvida em remove objeto com Iterator

3 respostas
I
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

import vetores.Aluno;

public class Main {

	public static void main(String[] args) {

		// CRIAÇÃO DOS OBJETOS
		Atendente c1 = new Atendente("Joao", 1000);
		Atendente c2 = new Atendente("Jose", 1000);
		Atendente c3 = new Atendente("Maria", 800);
		Atendente c4 = new Atendente("Pedro", 1900);
		Atendente c5 = new Atendente("Antonio", 2100);

		// CRIAÇÃO DA LISTA
		Collection<Atendente> lista = new TreeSet<Atendente>();
		
		// ADD NA LISTA
		lista.add(c1); lista.add(c2); lista.add(c3); lista.add(c4); lista.add(c5);
		// CRIACAO DO ITERATOR
		Iterator<Atendente> it = lista.iterator();

		// USANDO O ITERATOR PRA CHECAR SE HÁ PROXIMO
		while (it.hasNext()) {
			// PASSANDO A UM OBJ DO TIPO ATENDENTE AS AÇÕES DO ITERATORFF
			Atendente e = (Atendente) it.next();
			// IMPRIMINDO
			
			if(e.nome.equals("Joao")) {  //PQ NÃO ESTÁ REMOVENDO? COMO FAÇO? TENHO QUE SOBRESCREVER O METODO EQUALS DA MINHA CLASSE ATENDENTE?
				it.remove();
			}
			System.out.println(e.nome + " - " + e.salario);
		}

	}
}

A duvida é,
Pq não estou conseguindo remover o objeto que possui o nome “Joao”?

Abraçossss

3 Respostas

pmlm

Consegues remover sim:

while  (it.hasNext()) {   
    Atendente e =  it.next();   //Não precisas do cast, já dizes acima que é uma Collection de Atendentes
               
    if(e.nome.equals("Joao")) {  
        it.remove();      //aqui vais remover o objecto mas ainda vai imprimir, já que é o objecto actual do Iterator.
    }  
    System.out.println(e.nome + " - " + e.salario);  
}


//vamos ver como ficou a lista depois de remover
it = lista.iterator();  
System.out.println("================");
while (it.hasNext()) {  
    Atendente e = it.next();  
    System.out.println(e.nome + " - " + e.salario);  
}
R

O que esta acontecendo e que o objeto "Atendente e" que você esta imprimindo ele esta na memória, e
o que você esta excluindo e ele da lista, tente com esse código abaixo que você vai entender.

import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

import vetores.Aluno;

public class Main {

	public static void main(String[] args) {

		// CRIAÇÃO DOS OBJETOS
		Atendente c1 = new Atendente("Joao", 1000);
		Atendente c2 = new Atendente("Jose", 1000);
		Atendente c3 = new Atendente("Maria", 800);
		Atendente c4 = new Atendente("Pedro", 1900);
		Atendente c5 = new Atendente("Antonio", 2100);

		// CRIAÇÃO DA LISTA
		Collection<Atendente> lista = new TreeSet<Atendente>();
		
		// ADD NA LISTA
		lista.add(c1); lista.add(c2); lista.add(c3); lista.add(c4); lista.add(c5);
		// CRIACAO DO ITERATOR
		Iterator<Atendente> it = lista.iterator();

		// USANDO O ITERATOR PRA CHECAR SE HÁ PROXIMO
		while (it.hasNext()) {
			// PASSANDO A UM OBJ DO TIPO ATENDENTE AS AÇÕES DO ITERATORFF
			Atendente e = (Atendente) it.next();
			// IMPRIMINDO
			
			if(e.nome.equals("Joao")) {  //PQ NÃO ESTÁ REMOVENDO? COMO FAÇO? TENHO QUE SOBRESCREVER O METODO EQUALS DA MINHA CLASSE ATENDENTE?
				it.remove();
			}
                                                //Imprimindo Objeto ainda em memória
			//System.out.println(e.nome + " - " + e.salario) 
		}
                          //Verificando novamente a lista para mostrar que o Atendente não existe mais nela
                          it = lista.iterator();   
                          while (it.hasNext()) {  
        	                   Atendente e = (Atendente) it.next();
                                   System.out.println(e.nome + " - " + e.salario) ;
                          }

	}
}
I

Pronto, agora sim, vlws!!! =]]]

Não entendi muito essa parada de ta na memoria, mas ta funcionando =]

Obrigado!!

Criado 27 de maio de 2010
Ultima resposta 27 de mai. de 2010
Respostas 3
Participantes 3