| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2009 15:57:51
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
Trecho do livro Arquitetura e Design de Software
"O que você usa para armazenar um punhado de objetos? Um ArrayList? Uma LinkedList? Um HashSet?
Apesar disso, grande parte dos desenvolvedores opta por ArrayList diretamente sem nenhum critério."
ArraryList para ArryIterator, critério aceito ???
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2009 18:15:57
|
ccaneta
JavaBaby
![[Avatar]](/images/avatar/00a2aa5c43a94f625ebf713cb5bfb091.png)
Membro desde: 26/03/2006 20:30:54
Mensagens: 97
Offline
|
Fala ai Marciao,
Well... existem varios casos a serem analisados, mas te digo o ArrayList e o mais rapido para consultar elementos atraves do indice.
Posso garantir isso, pois realizei varios testes de profiling, e este e o que ocupa menos memoria e tem melhor tempo de resposta.
Abraçaooooo
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2009 18:39:29
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
ccaneta wrote:Fala ai Marciao,
Well... existem varios casos a serem analisados, mas te digo o ArrayList e o mais rapido para consultar elementos atraves do indice.
É ai que mora a questão !!!!, não existe uma resposta exata mas objetos podem ter comportamentos ( de X objetos para Y coleção ) em pontos já observados ao modelo de dominio,no que vai envolver um DAO ao exemplo exposto do livro ( observado X para Ys ) usando determinado pattern para determinado situção criação, estrutura ou comportamento ( que atende o dominio ) que vai combinar para essa gerencia ( programação voltado a interface ) que melhor atendeu em pontos da sua arquitetura, por consequencia os patterns regem os objetos , mas usar a Coleção é puro estado já observado ( requisitos aceitos ) em pontos de uma arquitetura ou solução que já se observou ( objetos atendeu o modelo ) ou melhor já deu certo.
Posso garantir isso, pois realizei varios testes de profiling, e este e o que ocupa menos memoria e tem melhor tempo de resposta.
Abraçaooooo
Veja quanto ao Profiling fica um mecanismo que é de pura instrumentação mas não vai ainda em si lhe provar tal tese a não ser que você já tenha isso simulado ou observado em arquiteturas anteriores.
Profiling é o Marketing !!!
This message was edited 12 times. Last update was at 29/07/2009 19:56:48
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/07/2009 22:31:32
|
Bruno Laturner
GUJ Expert
![[Avatar]](/images/avatar/5800ccd9514fd789d08e5831951aa6bc.jpg)
Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline
|
Os critérios que ele fala são quando você dá um peso maior à uma característica específica que a implementação provê.
No caso de Lists, o ArrayList tem a melhor performance para selecionar aleatóriamente um elemento, LinkedList é a melhor opção se você for trabalhar pesadamente com inserções no começo ou no final da lista, mas ela é ruim com acessos aleatórios. Vector utilizaria se precisasse de sincronização na lista (ou Collections.synchronizedList). Queues para FIFO, Stacks para LIFO...
Maps e Sets também podemos usar, mas tem usos específicos completamente diferentes.
Teoria, performance, tempo de processador, gasto de memória, propósito, todos são critérios a se considerar.
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 07:41:14
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
Bruno Laturner wrote:Os critérios que ele fala são quando você dá um peso maior à uma característica específica que a implementação provê.
No caso de Lists, o ArrayList tem a melhor performance para selecionar aleatóriamente um elemento, LinkedList é a melhor opção se você for trabalhar pesadamente com inserções no começo ou no final da lista, mas ela é ruim com acessos aleatórios. Vector utilizaria se precisasse de sincronização na lista (ou Collections.synchronizedList). Queues para FIFO, Stacks para LIFO...
Maps e Sets também podemos usar, mas tem usos específicos completamente diferentes.
Teoria, performance, tempo de processador, gasto de memória, propósito, todos são critérios a se considerar.
Agora eu pergunto, como achar o ponto certo ao uso dessas coleções para determinadas parte de seu Framework de sua Arquitetura, e que Design Pattern iria melhor prover resultados combinados com ela.Sera que isso é regra ?
Veja a situação aqui do Tiny Types como gerou um contrasenso ao seu uso, será que temos uma regra ou isso decorre de outras observações
This message was edited 1 time. Last update was at 30/07/2009 07:41:32
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 07:48:02
|
bKn
Java Ninja
Membro desde: 07/04/2009 15:22:18
Mensagens: 288
Offline
|
Onde você quer chegar? Mal da pra entender seus posts, leio e não sei se é uma pergunta ou uma afirmação.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 08:11:38
|
Juk
JavaChild
![[Avatar]](/images/avatar/f2b6806d6ed60d2d87b0dd5ae62e6f20.jpg)
Membro desde: 14/07/2006 18:09:33
Mensagens: 104
Offline
|
bKn wrote:Onde você quer chegar? Mal da pra entender seus posts, leio e não sei se é uma pergunta ou uma afirmação.
Fato! Não consigo entender nada dos posts dele!
|
Meu blog: http://blogdojuk.blogspot.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 08:25:09
|
Bruno Laturner
GUJ Expert
![[Avatar]](/images/avatar/5800ccd9514fd789d08e5831951aa6bc.jpg)
Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline
|
Marcio Duran wrote:Agora eu pergunto, como achar o ponto certo ao uso dessas coleções para determinadas parte de seu Framework de sua Arquitetura, e que Design Pattern iria melhor prover resultados combinados com ela. Sera que isso é regra ?
Primeiro, é saber qual problema que você tem e o que solução precisa ter para resolvê-lo. Isso tanto em níveis de código, quanto de design, e até na concepção, é comum um cliente só saber que ele tem um desconforto que ele quer resolver, mas não sabe as causas dele. Aí entram as consultorias para ajudá-lo.
Segundo, é leitura para conhecer as possíveis soluções, ou pelo menos ouvir falar delas. O que canso de ver é gente subestimando o Javadoc das APIs do Java.
Sobre usar Design Patterns: Experiência
e o que a falta de experiência faz nesses casos:
RT @AkitaOnRails Design Patterns considered Harmful (for newbies) http://blog.jovan-s.com/2009/07/29/do-not-use-design-patterns-upfront/
http://c2.com/cgi/wiki?DesignPatternsConsideredHarmful
http://developers.slashdot.org/comments.pl?sid=33602&cid=3636102
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 08:42:44
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
Bruno Laturner wrote:Os critérios que ele fala são quando você dá um peso maior à uma característica específica que a implementação provê.
No caso de Lists, o ArrayList tem a melhor performance para selecionar aleatóriamente um elemento, LinkedList é a melhor opção se você for trabalhar pesadamente com inserções no começo ou no final da lista, mas ela é ruim com acessos aleatórios. Vector utilizaria se precisasse de sincronização na lista (ou Collections.synchronizedList). Queues para FIFO, Stacks para LIFO...
Maps e Sets também podemos usar, mas tem usos específicos completamente diferentes.
Teoria, performance, tempo de processador, gasto de memória, propósito, todos são critérios a se considerar.
E depois dizem que otimização permatura é a raiz de todo o mal (balela). A escolha de qual implementação usar para um Lsit ou um Set e até se usar List ou Collection é vital.
só um adendo : LinkedList não é só melhor para inserções no inicio e no final. ele é bom para inserções normais (add) melhor que arraylist.
É raro, excepto em algum algoritmo muito especial ( como sorting) que faça acesso aleatório à lista. E nesse caso LinkedList sempre ganha porque normalmente o que vc quer fazer é adicionar um monte de objetos e depois iterá-los. É aqui que LinkedList é melhor.
Só existe um caso em que ArrayList é preferivel (tirando fora o acesso aleatorio) : quando vc sabe quantos elementos a lista vai ter.
Este codiog
é uma má prática.
Se vc sabe quantos elementos vai ter , use
Se vc não sabe , use LinkeList.
Um caso particular de saber quantos elementos ha é a copia de collecções, por exemplo
Usar ArrayList por padrão é errado. Com as opções que temos hoje em dia, é preciso saber o que estamos fazendo.
Este é um exemplo de que otimização permantura não é problema quando é OO.
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 08:56:50
|
ccaneta
JavaBaby
![[Avatar]](/images/avatar/00a2aa5c43a94f625ebf713cb5bfb091.png)
Membro desde: 26/03/2006 20:30:54
Mensagens: 97
Offline
|
Eu sou mais um ArrayList em cenarios de alto perfomance....
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 09:07:16
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
bKn wrote:Onde você quer chegar? Mal da pra entender seus posts, leio e não sei se é uma pergunta ou uma afirmação.
"Este é um exemplo de que otimização permantura não é problema quando é OO", concordo plenamente com a colocação do Sergio Taborda.
E acredito que linguagens tenha comportamento estratégicos com determinados Design Pattern e no que se refere também ao uso de suas regras, isso pode variar no contexto do FrameWork ou Arquitetura orientada ao Domínio ou Arquitetura orientado a Dados.
This message was edited 4 times. Last update was at 30/07/2009 09:10:25
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 09:13:01
|
Marcio Duran
GUJ Master
![[Avatar]](/images/avatar/df0e19d29493ef2136fc3e2fc029c054.jpg)
Membro desde: 23/01/2008 11:14:35
Mensagens: 1905
Offline
|
ccaneta wrote:Eu sou mais um ArrayList em cenarios de alto perfomance....
Mas o que vem a ser cenários de alta performance, isso se reflete para que padrões de projetos ?
|
Consultor Open Source
Comunidade JavaLivros
Twitter Comunidade JavaLivros
Novo Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 09:19:34
|
ccaneta
JavaBaby
![[Avatar]](/images/avatar/00a2aa5c43a94f625ebf713cb5bfb091.png)
Membro desde: 26/03/2006 20:30:54
Mensagens: 97
Offline
|
Marcio Duran wrote:
Mas o que vem a ser cenários de alta performance, isso se reflete para que padrões de projetos ?
Fala ai Marciao,
Entao Projetos de alta Perfomance sao aquelas situaçoes em que temos muita pouca memoria disponivel e precisamos de perfomance extrema, e qualquer otimizaçao q possa ser feita para evitar acessos de IO ou mais objetos na HEAP e mais que necessaria.
Como vc ja deve ter vivenciado nos clientes de mercado, as vezes a carga de usuarios referente junto com a má arquitetura projetada para aquela aplicaçao num servidor, podem virar uma verdadeira bomba atomica que ninguem sabe onde arrumar. No final isso vira o famoso Patinho feio!!
por isso, as vezes temos abrir mao de um bom design e projetarmos somente o extremo necessario.
abraçaoooo
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 09:24:42
|
Rubem Azenha
GUJ Master
![[Avatar]](/images/avatar/cb953f6ca5923f7517125db46ed1293d.jpg)
Membro desde: 28/06/2004 00:10:43
Mensagens: 1933
Localização: São Paulo, SP
Offline
|
sergiotaborda wrote:
E depois dizem que otimização permatura é a raiz de todo o mal (balela). A escolha de qual implementação usar para um Lsit ou um Set e até se usar List ou Collection é vital.
Mas você pegaria um projeto legado e sairia indiscriminadamente trocando as ArrayLists por LinkedList?
|
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/07/2009 09:43:46
|
Bruno Laturner
GUJ Expert
![[Avatar]](/images/avatar/5800ccd9514fd789d08e5831951aa6bc.jpg)
Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline
|
Rubem Azenha wrote:
sergiotaborda wrote:
E depois dizem que otimização permatura é a raiz de todo o mal (balela). A escolha de qual implementação usar para um Lsit ou um Set e até se usar List ou Collection é vital.
Mas você pegaria um projeto legado e sairia indiscriminadamente trocando as ArrayLists por LinkedList?
Heh, um problema de pegar esses legados é que tem sempre um que inventa de fazer coerção forçada de List para Vector(ou pior, só usar Vector), e quando você quer mudar a implementação, lá vem um ClassCastException.
Se realmente tivesse programado voltado para interfaces, poderia mudar as implementações de boa.
This message was edited 2 times. Last update was at 30/07/2009 09:44:59
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
|
|