| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2005 21:33:00
|
lordExorcist
JavaBaby
![[Avatar]](/images/avatar/b6e710870acb098e584277457ba89d68.jpg)
Membro desde: 02/05/2004 01:18:30
Mensagens: 89
Localização: Natal, RN
Offline
|
Bem, estou desenvolvendo um navegador (GUI) com os botões de "primeiro", "próximo", "anterior" e "último".
Qual classe (se existir) da API que possui os métodos necessários para navegação (tipo "first()", "next()", "previous()" e "last()")?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2005 22:14:01
|
Filipe Sabella
GUJ Expert
Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline
|
http://java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedList.html
Se for iterar pela lista, faça um favor para sua ram utilizando Iterators, e não um for .. size().
|
Former LIPE. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2005 22:50:18
|
keller
GUJ Master
![[Avatar]](/images/avatar/f410588e48dc83f2822a880a68f78923.jpg)
Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline
|
LIPE wrote:
Se for iterar pela lista, faça um favor para sua ram utilizando Iterators, e não um for .. size().
Há algum artigo que me prove isso?
*não estou duvidando, apenas por aprendizado.
**eu uso for .size()
valeu! até mais..
|
Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2005 23:53:47
|
Filipe Sabella
GUJ Expert
Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline
|
Bem, aprendi a razão disso na palestra do Guilherme Silveira
Basicamente cada List provê uma implementação diferente sobre a maneira em que os objetos são guardados.
Por exemplo o ArrayList guarda os objetos dentro de um array comum de objetos. Portanto é muito simples fazer um list.get( 13 ), pois internamente ela fará return array[ 13 ]. Mas se fosse necessário inserir um objeto na posição 0 do array, internamente seria necessário realocar todas as instâncias para numa nova posição.
No caso da LinkedList, a implementação é diferente, fazendo com que seja muito simples inserir um objeto no topo ou no fim, porém, para pegar um objeto numa posição específica é bem mais lento.
Por esse motivo que todas as Collections implementam Iterator. Ao pedir este objeto para a coleção, ela retornara um objeto que sabe a melhor maneira possível para iterar sobre todos os objetos nela contidos.
Para o usuário do Iterator, tanto faz como ele funciona internamente, mas utilizá-lo ao inver do for .. size() pode ser crítico ao mudar a implementação da Collection.
Um exemplo:
Esse processo ocorreria com uma certa tranquilidade. Mas caso o método test fizesse isto:
Seu pc iria explodir
Você pode baixar os arquivos da palestra (cujos exemplos acima be baseei completamente) aqui:
http://www.guj.com.br/posts/list/20765.java
|
Former LIPE. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/03/2005 01:29:07
|
Fabricio Cozer Martins
GUJ Ranger
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
unnhh ... massa mesmo essas dicas!!!!..
estava estudando justamente isso aqui hoje ...
Na verdade o LinkedList utiliza o algoritmo de ListaDuplamenteEncadeada,
e só vai ser util caso vc precise acessar , incluir , remover , elementos das pontas , inicio e fim da lista ...
Vou dar uma olhada nesse material da palestra!!!
valeu mesmo cara pela dica... estava procurando um material desse...
isso que faz a diferenca em grandes aplicacoes !!! rsrsrs!!!
Essa galera do GUJ bota pra la!!!!!
rodei ate aqui um exemplo..
Saida:
---------------
tempo do ArrayList: 7.11 s
tempo do LinkedList: 0.21 s
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/03/2005 02:27:16
|
fcmartins
Java Ninja
![[Avatar]](/images/avatar/35a0f1963430da063133ba27d695f851.png)
Membro desde: 12/01/2005 09:40:43
Mensagens: 293
Localização: Bragança Paulista- SP
Offline
|
Eu andei lendo uns artigos no OnJava sobre coleções e os testes feitos mostram que em muito poucos casos a LinkedList é melhor que um ArrayList, inclusive nos casos em a melhora seria esperada. Na dúvida acabei rodando uns testes por conta própria (na 1.4, preciso refazer na 1.5) e confirmei que o desempenho da LinkedList é mesmo inferior ao do ArrayList e mesmo quando é superior a diferença não é significativa.
This message was edited 2 times. Last update was at 03/03/2005 02:28:33
|
Almanaque
{SCJP 1.4}
{SCWCD 1.4} |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/03/2005 02:35:15
|
Fabricio Cozer Martins
GUJ Ranger
![[Avatar]](/images/avatar/2ecd2bd94734e5dd392d8678bc64cdab.jpg)
Membro desde: 08/05/2004 10:22:03
Mensagens: 935
Localização: Salvador/Brasil
Offline
|
ahh .. de uma pesquisada sobre ListIterator ... vc pode navegar pra frente e pra tras...
|
Fabrício Cozer Martins
Analista de Sistemas
Bacharel em Ciência da Computação da UFBa
Sun Certified Programmer for Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE 1.4 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2005 17:50:50
|
Guilherme Silveira
Administrador
Membro desde: 14/08/2002 10:09:26
Mensagens: 1096
Localização: Sao Paulo
Offline
|
fcmartins wrote:Eu andei lendo uns artigos no OnJava sobre coleções e os testes feitos mostram que em muito poucos casos a LinkedList é melhor que um ArrayList, inclusive nos casos em a melhora seria esperada. Na dúvida acabei rodando uns testes por conta própria (na 1.4, preciso refazer na 1.5) e confirmei que o desempenho da LinkedList é mesmo inferior ao do ArrayList e mesmo quando é superior a diferença não é significativa.
ArrayList e LinkedList nao sao iguais. Possuem tempos diferentes e algoritmos diferentes.
Exemplo:
Tente adicionar 50000 objetos na posicao zero de uma arraylist. Cronometre o tempo
Faca o mesmo com linkedlist.
Resultado: linked list ganha
Tente fazer um for(int i=0;i<10000;i++) e chamar get(i) em uma linkedlist
Faca o mesmo para uma arraylist
Resultado: array list ganha
Resultado final:
Dependendo do que voce vai fazer a escolha de ArrayList ou LinkedList faz o seu programa funcionar o nao. Como o proprio Lipe comentou, voces podem encontrar o ppt da apresentacao com exemplos muito legais e explicacoes teorias: nao se iludam, a escolha do algoritmo nao eh facil e FAZ TODA A DIFERENCA
Fcmartis, se voce se preocupa com pilha, fila etc, a discussao de arraylist cai como uma luva pois eh quando linkedlist pode ser MILHOES de vezes mais rapido (sem exagero).
Att
Guilherme
|
-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2005 17:52:51
|
Guilherme Silveira
Administrador
Membro desde: 14/08/2002 10:09:26
Mensagens: 1096
Localização: Sao Paulo
Offline
|
gui wrote:
LIPE wrote:
Se for iterar pela lista, faça um favor para sua ram utilizando Iterators, e não um for .. size().
Há algum artigo que me prove isso?
*não estou duvidando, apenas por aprendizado.
**eu uso for .size()
valeu! até mais.. 
Qualquer livro que ensine lista ligada e arrays, ou curso de analise de algoritmos em faculdade mostra que o tempo esperado de iteracao em:
lista ligada: O(N*N)
arraylist: O(N)
Tem o site do www.ime.usp.br/~pf com informacoes na area
Att
Guilherme Silveira
|
-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2005 18:16:52
|
mister__m
Virtual Machine Man
![[Avatar]](/images/avatar/89b9c689a57b82e59074c6ba09aa394d.jpg)
Membro desde: 18/03/2005 16:13:17
Mensagens: 736
Offline
|
Nota importante a todos: se você tem um método que roda esporadicamente, fora de um loop, em que você precisa criar uma List e adicionar um punhado de itens, use a primeira implementação que vier à sua cabeça
Parece brincadeira, mas não é. Não vai fazer como o povo que cria String com StringBuffer (e agora StringBuilder) pra concatenar duas Strings. Legibilidade sempre que possível.
Tudo isso que foi comentado aqui é realmente importante para quando você precisar de performance. Nos outros casos, seja consistente e use sempre a mesma forma de fazer as coisas, até para que alguém no futuro não pare para ler seu código e ache que tem algo relevante naquele método porque usa LinkedList ao invés de ArrayList...
|
Michael Nascimento Santos, aka Mister M
Summa Technologies do Brasil - http://www.summa-tech.com/
genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
Líder da JSR-310 - Date and Time API
Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
JSR Community @ java.net - http://community.java.net/jsr
Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
Twitter - @mr__m |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/04/2005 18:42:53
|
Guilherme Silveira
Administrador
Membro desde: 14/08/2002 10:09:26
Mensagens: 1096
Localização: Sao Paulo
Offline
|
boa Michael,
tentando concatenar com a sua ideia:
Se voce por algum motivo precisa escolher uma implementacao nao comum (como o caso de algoritmos especificos) por causa de performance em um caso especifico, COMENTE ou DOCUMENTE porque voce fez tal escolha....
Abraco
Guilherme
ps: tambem odeio o caso do stringbuffer em metodo bobo
|
-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
 |
|
|
 |
|
|