O Iterator serve para localizar, remover e adicionar certo ? Mas se a gente pode fazer uma estrutura que tenha todos esses métodos, vide LinkedList, qual seria a praticidade de se ter um Iterator ? De todo jeito eu tenho que acessar por índice (não no caso do hasNext()).
Realmente é utilizado ? Os exemplos do DEITEL em relação a coleções são muito fracos :?
Eu utilizo o Iterator para percorrer os Collections, pessoalmente acho melhor do que usar um for com o size()…
Se não me engano a Sun se baseou em um Pattern de mesmo nome para criar esta “estrutura” dentro dos collections…
O Iterator é um pattern que visa principalmente esconder a estrutura do Collection, para acessar os dados do List, por exemplo, bastaria conhecer o iterator…
Espero ter lhe ajudado…
J
JBoy_
Hum… então é só mais um meio de se percorrer uma Collection certo ? Posso usar dos dois jeitos.
Eu achei que tinha alguma coisa a mais que fosse preciso para implementar uma List ou algo do tipo corretamente.
Mas valeu
P
Paulo_Silveira
Numa LinkedList eh essencial usar o iterator, ja que a LinkedList nao tem acesso aleatorio ao seus elementos. isto eh, para cada get(int), ele percorre a lista INTEIRA ateh chegar ao elemento: devagar demais.
Usando o iterator, ele vai pulando de node em node.
E
escordeiro
Esse padrão (pattern) é apresentado no livro Padrões de Projeto, de Erich Gamma e outros (tradução da editora Makron Books).
Segundo o livro a intenção é “fornecer um meio de acessar, sequencialmente, os elementos de um objeto agregado sem expor a sua representação subjacente.”
A idéia do Iterator é realmente percorrer uma coleção, porém vc pode utilizar Iterators diferentes para percorrer uma coleção de forma diferente…se vc usar um Iterator ao invés de implementar na própria lista o código pra percorrê-la como vc quer, vc evita carregar a interface da lista com coisas que não pertencem a ela…
Achei legal comentar sobre esse tópico pra fazer uma “propaganda” dos padrões de projeto, é um conjunto muito legal de soluções para quem está projetando um sistema, que abre a mente pra várias idéias interessantes que fortalecem as vantagens da orientação a objetos.
[]'s
R
Rafael_Steil
“Paulo Silveira”:
Numa LinkedList eh essencial usar o iterator, ja que a LinkedList nao tem acesso aleatorio ao seus elementos. isto eh, para cada get(int), ele percorre a lista INTEIRA ateh chegar ao elemento: devagar demais.
Usando o iterator, ele vai pulando de node em node.
Isso significa que eh melhor fazer um loop usando Iterator, e a cada iteracao, comparar se o node atual eh o que queremos, do que usar o metodo get(i) ?
Rafael
P
Paulo_Silveira
numa linkedlist? 100 mil vezes melhor. Numa arraylist, nao faz a menor diferenca.
J
JBoy_
Por bondade, ou Rafael ou Paulo, poderiam colocar um exemplo desse loop com iterator afim de que eu possa me situar direito ?
Deus te abençoe
R
Rafael_Steil
Eh bem simples, e o funcionamento vale para qualque caso de iterator:
LinkedListlist=newLinkedList();// ....for(Iteratoriter=list.iterator();iter.hasNext();){// Digamos que a gente soh tenha strings na listaStringitem=(String)iter.next();// ...}
Apenas um ponto interessante: usar iterator eh mais rapido quando voce precisa pegar todos os itens, os uma sequencia deles… agora, se vc precisar apenas do item X, nao vai fazer diferenca o uso do metodo get() ou iterar pelos elementos.
O problema com get(), quando queremos ir de item em item, eh que ele sempre comeca do 0 a cada loop, ao contrario do iterator(), que guarda o ultimo elemento visitado.
Rafael
G
guscoppi
LinkedList e ListIterator, funcionam com o mesmo principio?
R
Rafael_Steil
Nao… linkedlist eh uma classe para armazenar dados, listiterator eh, a grosso modo, como o iterator.
Rafael
C
cv1
ListIterator e’ so’ um dos muitos tipos especializados de Iterators que tem na API… geralmente, vc precisa so da interface (Iterator), e nao do tipo mais especializado (ListIterator) pra trabalhar, e o metodo iterator() da collection que vc esta acessando ja te da a instancia certtinha
E
Eder_Bage
como faço pra mostrar um nome q cadastrei atraves de um metodo de pesquisa, pq meu programa so mostra o ultimo nome e o primeiro nao.
//Metodo cadastropublicvoidcadastrar(){Lista=newArrayList(5);Lista.add(txt_nome.getText());//iclui no array e captura o texto <ahref="//Lista.add">//Lista.add</a>(txt_idade.getText());JOptionPane.showMessageDialog(this,"Nome Cadastrado: "+txt_nome.getText());// Apresenta o nome cadastradotxt_nome.setText(null);//limpa o espaço anteriortxt_nome.requestFocus();//Retorna ao foco //txt_idade.setText(null);}
publicvoidpesquisar(){Stringp=JOptionPane.showInputDialog(this,"Digite o nome a pesquisar");IteratorI=Lista.iterator();while(I.hasNext()){Stringaux=(String)I.next();if(aux.equals(p)){JOptionPane.showMessageDialog(this,"Nome está cadastrado!");//txt_nome.setText(aux);//System.out.println(aux);p=null;break;}elseJOptionPane.showMessageDialog(this,"Nome não está cadastrado!");}}
D
diego2005
Porque você não faz assim:
ArrayList<String> lista = new ArrayList<String> ();
lista.add("Nome 1");
lista.add("Nome 2");
lista.add("Nome 3");
lista.add("Nome 3");
for(String s : lista) {
System.out.println(s);
}
T+
E
Eder_Bage
cara mas o problema é q deveria cadastrar qdo clico no botao cadastrar e qdo clico em pesquisa deveria pesquisar o nome digitado. e nao to consiguindo isso.
D
diego2005
Pelo que vi você está instanciando seu ArrayList toda vez que vai cadastrar um novo nome:
public void cadastrar(){
Lista = new ArrayList(5); // NÃO PODE ESTAR AQUI..
Lista.add(txt_nome.getText());//iclui no array e captura o texto
//Lista.add(txt_idade.getText());
JOptionPane.showMessageDialog(this, "Nome Cadastrado: " +txt_nome.getText());// Apresenta o nome cadastrado
txt_nome.setText(null);//limpa o espaço anterior
txt_nome.requestFocus();//Retorna ao foco
//txt_idade.setText(null);
}
Você tem que colocar essa instanciação em outro lugar. Acho que o ideal seria no construtor da classe.
T+
P
pokernet
por favor preciso de ajuda , e acho que vcs teêm a minha soluçao …pelo que eu li vcs estao falando de um programa para cartas correto ? , bem eu preciso de um programa que me ajude a ganhar no poker online …um programa que me dÊ as cartas que eu preciso para fazer as melhores maos… se vcs me ajudarem vao me fazer muito feliz , pois nunca consigo ganhar ,pois alguem sempre tem um programa desses …espero a resposta de vcs ansiosamente … obrigado e fikem na paz
W
WillyKocher
ahuahua minha nossa… qual graça de jogar assim? ta jogando apostando alto e ta perdendo ? e não é tão simples fazer um programa assim tem que cadastrar uma serie de possibilidades entre mao x mesa x numero de jogadores…