List.add() enquanto estou usando Iterator.next()  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
dudaskank
GUJ Ranger
[Avatar]
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline

Olá pessoal do GUJ

Estou com um pequeno problema... estou criando um framework para jogos em Java aqui para a minha monografia (ou pelo menos tentando), e minha classe Game possui uma lista com todos os objetos do jogo.

Tem nela também um método para atualizar os objetos conforme o tempo passa no jogo... até aí tudo certo.

Esses dias fui tentar adicionar um novo objeto na lista durante este método update, mas deu erro porque tentei modificar a lista durante a utilização de um Iterator... a solução que encontrei foi criar duas listas temporárias, uma para adicionar e outra para remover objetos da lista principal, e o código ficou assim:



Gostaria de saber de vocês se existem outros métodos, se possível mais eficientes, para se fazer isso.

Falou e obrigado ^_^

Eduardo Oliveira

Toque a balada do amor inabalável, eterna love song de nós dois...

Página
[WWW]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

Voce vai precisar de duas listas mesmo.

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
jgbt
GUJ Master
[Avatar]

Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline

acho que se vc iterasse a lista com um for em vez de usar iterator funcionaria.
como vc implementou realmente precisa de duas listas.

[]'s

João Bier
Desenvolvedor Java
[Email]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

jgbt wrote:acho que se vc iterasse a lista com um for em vez de usar iterator funcionaria.


De qualquer maneira vc fica sujeito a ConcurrentModificationExceptions
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
jgbt
GUJ Master
[Avatar]

Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline

cv wrote:
jgbt wrote:acho que se vc iterasse a lista com um for em vez de usar iterator funcionaria.


De qualquer maneira vc fica sujeito a ConcurrentModificationExceptions

confesso que não analizei completamente o codigo passado, mas quando falei sobre modificar a lista falava em algo assim:

com iterator isso não funcionaria.

[]'s
>

João Bier
Desenvolvedor Java
[Email]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

O teu codigo eh mto suscetivel a problemas de performance caso a implementacao de List nao seja um ArrayList. Por exemplo, um get(int) em uma LinkedList vai ser beeeem mais lento que um get(int) de um ArrayList.

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
jgbt
GUJ Master
[Avatar]

Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline

Rafael Steil wrote:O teu codigo eh mto suscetivel a problemas de performance caso a implementacao de List nao seja um ArrayList. Por exemplo, um get(int) em uma LinkedList vai ser beeeem mais lento que um get(int) de um ArrayList.

Rafael

concordo, a performance ficaria comprometida se a implementação fosse como vc citou um LinkedList.
quando usei esse tipo de iteração, não eram em listas tão grandes, mas as modificações eram feitas dentro do laço.
o que eu queria confirmar é que se em algum momento eu corro o risco de receber uma ConcurrentModificationExceptions, como aconteceria se usasse iterator.

[]'s

João Bier
Desenvolvedor Java
[Email]
dudaskank
GUJ Ranger
[Avatar]
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline

Valeu pessoal... mais algumas dúvidas:

concordo, a performance ficaria comprometida se a implementação fosse como vc citou um LinkedList.


Mas qual código vocês dizem, o meu com o Iterator ou o usando get()? Acredito que seja o com o get(), mas não custa perguntar... inclusive eu usei o Iterator por causa disso mesmo, acredito que o Iterator seja mais rápido.

Também gostaria de saber se existe alguma implementação de lista ideal para o meu caso. Atualmente estou usando Vector mesmo, mas depois pretendo testar usando com ArrayList e uma LinkedList também, ou alguma outra... qual vocês recomendariam para mim?

Eduardo Oliveira

Toque a balada do amor inabalável, eterna love song de nós dois...

Página
[WWW]
jgbt
GUJ Master
[Avatar]

Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline

não use vector ao menos que vc precise sincronização no acesso.
vector tem seus metodos marcados como synchronized, por isso são mais lentos.
se vc precisa velocidade e não vai fazer inserções/modificações no meio da lista, ArrayList é a melhor opção, usando iterator.
flw!

[]'s

João Bier
Desenvolvedor Java
[Email]
dudaskank
GUJ Ranger
[Avatar]
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline

Ok... mas e no caso de eu precisar de velocidade mas quiser inserir e deletar da lista?

Por exemplo, no jogo que vou desenvolver, estou pretendo fazer com que o GameObject do jogador ao apertar uma tecla adicione GameObjects de tiro, e estes ao sairem da tela ou encostarem no inimigo devem ser removidos... e por aí vai...

^_^

Eduardo Oliveira

Toque a balada do amor inabalável, eterna love song de nós dois...

Página
[WWW]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

Se vc tem algum "identificador" para os objetos, utilize um HashMap. Vai ser bem mais rapido que usar um ArrayList.

Rafael

This message was edited 1 time. Last update was at 01/03/2005 14:02:12


"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team