LinkedList Min Max  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
spiderman
JavaChild

Membro desde: 21/02/2010 20:13:14
Mensagens: 140
Offline

Olá .. Estou precisando achar o valor min e mas em um LinkeList<object); sei que Collection resolve meu problema de achar o min e max se eu tiver <int>, <long>, etc... Mas não estou conseguindo chegar em uma solução para achar o min e max na seguinte situação.





Estou precisando achar o menor workload entre os objetos Task armazenados em minha Lista. Alguem poderia me adjuar??

até
sergiotaborda
GUJ Expert
[Avatar]

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

spiderman wrote:Olá .. Estou precisando achar o valor min e mas em um LinkeList<object); sei que Collection resolve meu problema de achar o min e max se eu tiver <int>, <long>, etc... Mas não estou conseguindo chegar em uma solução para achar o min e max na seguinte situação.


O problema de usar list é que podem haver mais do que um minimo ou mais do que um máximo.

Na realidade linkedlist não é a melhor opção aqui.

Primeiro ordene a lista usando um comparator que compara o tamanho das tasks.
Os extremos serão agora o minimo e o máximo. Vc pega o ultimo item e o primeiro.
Depois compara com os items imediatamente a seguir e se forem iguais vc tem que decidir qual quer.

Se vc tem a garantia de que apenas existe um máximo e um minimo, ou que , havendo vários qq um serve, então é melhor usar TreeSet
Esta classe faz as contas para vc e imediatemante lhe retorna os máximos e minimo usando last() e first()

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
renanedpedroso
JavaTeenager
[Avatar]

Membro desde: 17/03/2010 10:55:10
Mensagens: 180
Localização: Poços de Caldas / MG
Offline

Classes:



Espero ter ajudado!

Abraço!

This message was edited 2 times. Last update was at 19/03/2010 11:27:29


Renan Eduardo Pedroso
Analista e Desenvolvedor Java
[MSN]
renanedpedroso
JavaTeenager
[Avatar]

Membro desde: 17/03/2010 10:55:10
Mensagens: 180
Localização: Poços de Caldas / MG
Offline

sergiotaborda wrote:
Primeiro ordene a lista usando um comparator que compara o tamanho das tasks.
Os extremos serão agora o minimo e o máximo. Vc pega o ultimo item e o primeiro.
Depois compara com os items imediatamente a seguir e se forem iguais vc tem que decidir qual quer.

Se vc tem a garantia de que apenas existe um máximo e um minimo, ou que , havendo vários qq um serve, então é melhor usar TreeSet
Esta classe faz as contas para vc e imediatemante lhe retorna os máximos e minimo usando last() e first()


Pode ser que eu não tenha entendido a dúvida do nosso amigo, mas não acho necessário fazer tudo isso só pra achar o min e o máx.

Se eu entendi errado, desconsiderem os meus posts acima.

Espero ter ajudado!

Abraço!

This message was edited 1 time. Last update was at 19/03/2010 11:33:14


Renan Eduardo Pedroso
Analista e Desenvolvedor Java
[MSN]
marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

O método do Taborda evita todos esses métodos que você escreveu, acho mais prático, mas é um pouco mais complicado de "entender" á primeira vista...
renanedpedroso
JavaTeenager
[Avatar]

Membro desde: 17/03/2010 10:55:10
Mensagens: 180
Localização: Poços de Caldas / MG
Offline

Concordo que à primeira vista é mais complicado de "entender", mas se fosse uma lista bem grande, como ficaria o desempenho disso tudo pra ordenar?

Abraço!

Renan Eduardo Pedroso
Analista e Desenvolvedor Java
[MSN]
spiderman
JavaChild

Membro desde: 21/02/2010 20:13:14
Mensagens: 140
Offline

Não sei se minha se eu estou correto, não cheguei a testar ainda mas me parece que o metodo do renanedpedroso está correto. Concordo com nosso amigo taborda, mas o meu problema é que não posso ordenar os elementos dessa lista, ou seja, tenho que manter a ordem de inserção.


t+-
marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

spiderman wrote:Não sei se minha se eu estou correto, não cheguei a testar ainda mas me parece que o metodo do renanedpedroso está correto. Concordo com nosso amigo taborda, mas o meu problema é que não posso ordenar os elementos dessa lista, ou seja, tenho que manter a ordem de inserção.


t+-


Aí é um outro caso, e realmente o método do Taborda não seria ideal...

Voce poderia também criar sua própria classe implementando a interface List, e no método add() já verificar se este é o máximo ou o minimo... algo do tipo:


Exemplinho tosco, mas acho que deu pra entender o que eu tentei dizer...
renanedpedroso
JavaTeenager
[Avatar]

Membro desde: 17/03/2010 10:55:10
Mensagens: 180
Localização: Poços de Caldas / MG
Offline

Essa maneira de guardar o min e max que o Marcelo mostrou é a mais otimizada de todas, pois você (futuramente) não precisará percorrer a lista em nenhum momento.

Marcelo, não achei o exemplo tosco não, muito pelo contrário quando 'bati o olho' nele já identifiquei qual era a idéia, isso é o que vale. hehehehe

Abraço!

This message was edited 1 time. Last update was at 19/03/2010 15:10:17


Renan Eduardo Pedroso
Analista e Desenvolvedor Java
[MSN]
marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

renanedpedroso wrote:Essa maneira de guardar o min e max que o Marcelo mostrou é a mais otimizada de todas, pois você (futuramente) não precisará percorrer a lista em nenhum momento.

Marcelo, não achei o exemplo tosco não, muito pelo contrário quando 'bati o olho' nele já identifiquei qual era a idéia, isso é o que vale. hehehehe

Abraço!


Hehehe... é, a minha idéia foi personalizar a lista pro requisito dele... então, á cada novo objeto adicionado na List ele já valida o max e o min, sem precisar ficar fazendo mágica, nem iterações, etc etc... não sei se dá pra ficar melhor que isso... não pro caso dele, pelo menos...
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4154
Localização: São Paulo
Offline

Exemplo do Marcelo é excelente. Faz 2n compatações, melhor que o O(nlogn) que ordenar gastaria, se for apenas esse o proposito. Podia tambem implementar Comparable e chamar Collections.min/max

This message was edited 1 time. Last update was at 19/03/2010 16:17:26


http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
marcelo.bellissimo
Virtual Machine Man

Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline

Paulo Silveira wrote:Exemplo do Marcelo é excelente. Faz 2n compatações, melhor que o O(nlogn) que ordenar gastaria, se for apenas esse o proposito. Podia tambem implementar Comparable e chamar Collections.min/max


Eu pensei nisso também... aliás, muito bom receber elogios do cara que me ensinou a fazer isso... (fui seu aluno ai na Caelum, Paulo... faz teeeempo! )
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team