| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/02/2005 23:58:30
|
dudaskank
GUJ Ranger
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 00:04:47
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 00:08:38
|
jgbt
GUJ Master
![[Avatar]](/images/avatar/25df35de87aa441b88f22a6c2a830a17.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 06:47:41
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 09:10:59
|
jgbt
GUJ Master
![[Avatar]](/images/avatar/25df35de87aa441b88f22a6c2a830a17.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 09:28:21
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 09:36:16
|
jgbt
GUJ Master
![[Avatar]](/images/avatar/25df35de87aa441b88f22a6c2a830a17.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 13:20:53
|
dudaskank
GUJ Ranger
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 13:39:39
|
jgbt
GUJ Master
![[Avatar]](/images/avatar/25df35de87aa441b88f22a6c2a830a17.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 13:45:46
|
dudaskank
GUJ Ranger
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/03/2005 14:02:01
|
Rafael Steil
Administrador
![[Avatar]](/images/avatar/8e296a067a37563370ded05f5a3bf3ec.jpg)
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 |
|
|
 |
|
|