Qual é a vantagem do Iterator?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

xdraculax wrote:Então, se eu uso o for, e dentro do for eu acesso o elemento de uma LinkedList pelo índice, significa que na execução do get, a iteração vai percorrer todos os elementos da LinkedList até o índice da iteração atual do MEU loop, correto?

Estou perguntando porque já vi isso em uns códigos aqui, e não reparei nisso.

Quando vou fazer iteração com loop (se for um ArrayList) eu uso o:

for( Tipo t: coleção){...}

Nesse caso, ele use o iterator para percorrer os elementos da lista?


Sim. Mas veja que na realidade o for extendido é uma operação especial do compilador.
Ele compila codigo diferente conforme o objeto iterado é um array ou um Iterable. qualquer Iterable pode ser usado, não apenas Collection e Map e suas filhas. Vc pode criar objetos que são naturalmente compostos e iterálos facilmente, exemplo



no caso aqu teriamos a classe Pedido que implementa Iterable<ItemPedido>

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
xdraculax
Java Ninja

Membro desde: 12/01/2009 16:12:54
Mensagens: 286
Offline

Entendi, obrigado pela ótima explicação .

Só uma nota: então, as implementações de estruturas de dados como LinkedList não deveriam ter um método de obtenção por índice (como o get), e sim somente hasNext() e next().

-Atenha-se a resolver o problema, e não criticar opiniões.
-Você percebe que está programando d+, quando está escrevendo identado!
-Não precisa estar certo, basta acreditar.
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline

xdraculax wrote:Só uma nota: então, as implementações de estruturas de dados como LinkedList não deveriam ter um método de obtenção por índice (como o get), e sim somente hasNext() e next().


E por que não? Você pode, efetivamente, querer pegar o segundo elemento da lista uma única vez:


Não é a operação mais rápida do mundo num LinkedList, mas é uma operação possível em listas. Se for feita esporadicamente, ou em listas menores, não compromete a performance.

Mas por isso, quando você vai utilizar collections, é importante conhecer bem as características de cada uma delas. Especialmente se você estiver trabalhando com otimização, seja de memória ou de velocidade.

This message was edited 1 time. Last update was at 24/06/2010 16:36:06


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
andredecotia
JWizard
[Avatar]

Membro desde: 19/10/2009 14:37:32
Mensagens: 2267
Localização: São Paulo
Offline

Para todos os outros tipos (LinkedList, Set, Map etc.) você tem de usar o Iterator.



Oi Thingol, por favor pode me explicar como assim todos os outros usam o iterator?

--
André AS


Analista Programador Java Web freelancer / home office
Linkedin: http://www.linkedin.com/profile/view?id=41470291&trk=tab_pro

[Email] [MSN] [ICQ]
andredecotia
JWizard
[Avatar]

Membro desde: 19/10/2009 14:37:32
Mensagens: 2267
Localização: São Paulo
Offline

Para todos os outros tipos (LinkedList, Set, Map etc.) você tem de usar o Iterator.



Oi Thingol/Vini, podem me explicar como assim todos usam o iterator?


abraço,
André AS

--
André AS


Analista Programador Java Web freelancer / home office
Linkedin: http://www.linkedin.com/profile/view?id=41470291&trk=tab_pro

[Email] [MSN] [ICQ]
rarylson
What is classpath?

Membro desde: 08/11/2009 14:15:11
Mensagens: 6
Offline

Se quiserem entender bem a vantagem de um Iterator, experimenta percorrer uma árvore da Collections em pré-ordem e depois em pós-ordem sem usar Iterator...

This message was edited 1 time. Last update was at 22/09/2010 01:26:33

danilocmiranda
JavaBaby
[Avatar]

Membro desde: 18/09/2009 08:15:19
Mensagens: 85
Offline

E adicionar um Objeto a coleção durante o for?
Como a gente faz isso com iterator?

site-blog -> http://danilomiranda.com
twitter -> @danilocmiranda
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline

danilocmiranda wrote:E adicionar um Objeto a coleção durante o for?
Como a gente faz isso com iterator?


Isso não tem como.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
danilocmiranda
JavaBaby
[Avatar]

Membro desde: 18/09/2009 08:15:19
Mensagens: 85
Offline

Então qual a melhor forma de percorrer uma List e adicionar um objeto a ele?
Só criando uma nova List com os novos objetos?

site-blog -> http://danilomiranda.com
twitter -> @danilocmiranda
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline

Não entendi. Pra que você precisa percorrer o ArrayList? Não basta só dar add?

Se você não puder inserir duplicados, então é melhor usar um Set. O set também cobre o caso para a ordenação.

Se você precisar inserir um objeto numa ordem específica, faça a busca com o Collections.binarySearch e em seguida use o método insert que aceita como parãmetro um índice, além do valor.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
danilocmiranda
JavaBaby
[Avatar]

Membro desde: 18/09/2009 08:15:19
Mensagens: 85
Offline

Eu tenho uma lista que é alimentada pelos objetos comuns de outras Listas (podem ser de duas a quatro listas)
Hoje o que faço é percorrer a List com o resultados dos objetos comuns das outras listas e dentro um for aninhado que percorre as outras listas e incrementa na lista Resultado.
Então dentro destes for's vou incrementando numa Lista Auxiliar e fora do for eu "seto" esta lista auxiliar na lista resultado.

Mais ou menos assim



Está funcionando, mas estou achando complicado demais...
alguma dica para simplificar este código?

P.s.: Perdão se cometi algum pecado no código, estou me expondo para aprender.

site-blog -> http://danilomiranda.com
twitter -> @danilocmiranda
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline

O resultado final é o que tiver de comum em todas as listas, é isso?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
danilocmiranda
JavaBaby
[Avatar]

Membro desde: 18/09/2009 08:15:19
Mensagens: 85
Offline

Isso, o resultado é tudo que tem de comum entre as listas.
E ainda tenho que contar quantas vezes cada objeto apareceu nas listas.

site-blog -> http://danilomiranda.com
twitter -> @danilocmiranda
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20587
Localização: Curitiba/PR
Offline

Eu contaria através de um map<objeto, integer>().

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
danilocmiranda
JavaBaby
[Avatar]

Membro desde: 18/09/2009 08:15:19
Mensagens: 85
Offline

Entendi, vou fazer isso, acho que colocando dentro do meu código vai ser bem simples.
Valeu pela dica Vini.
O que achou do código? Dá pra melhorar?

site-blog -> http://danilomiranda.com
twitter -> @danilocmiranda
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team