Ordenar um HashMap usando o Compare ou Compare to  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
edileyoliveira
Debugger

Membro desde: 02/06/2008 14:52:50
Mensagens: 62
Offline

Olá eu tenho uma classe chamada placar que possui o nome e a pontuação de um jogador, e eu tenho outra classe chamada Records que ira armazenar em ordem todos os placar dos jogos, nessa classe records eu tenho dois hashmap(um armazena os records sem esta ordenado e o outro ordenado) e uma LinkedList. Para ordenar estou usando um Collections.sort, mas o professor disse que naum quer assim, ele disse que quer que usemos o compare ou algo assim.


Alguem pode me dar uma luz, pois da maneira que o prefessor tah pedindo eu até axei algo explicando, mas naum consegui entender, estou anexando minha duas classes, que por sinal esta funcionando pefeitamente, mas naum como o professor quer.

e ja ia me esquecendo, eu tenho que ordenar primeiro pela pontuação, e se tiver duas pontuações iguais ae pelo nome.



This message was edited 1 time. Last update was at 12/04/2009 15:58:13

Lavieri
GUJ Master
[Avatar]

Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline

se vc quer Maps ordenados então vc precisa usar TreeMap, e não HashMap... pelo que vc falou, vc quer ordenar o mapa pelo placar, e depois pelo nome, caso o placar seja igual...

1° lugar o seguinte... pra que o MAP ? não entendi a função dele.. qual a função do Integer, Placa ?? ... enfim não vou entrar no merito disso... c vc ker ordenar... então seria assim

vc precisa comparar o value e não a key, então vai ter q fazer um comparator 1 pouco complicado... veja abaixo como seria...



ai vai ter q falar para o comparator quem é o map, se não fica impossivel descobrir os placares, já que a ordem de um Map é feito pela KEY e não pelo value...



Criado assim o meu TreeMap, ele vai ser ordenado automaticamente a cada entrada... vai sempre se manter na ordem especificada pelo Comparator, é so ir adcionando os dadas...

This message was edited 2 times. Last update was at 12/04/2009 18:37:31


Sun Certified Java Programmer (SCJP 6)

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999

Meu blog -> http://blog.tomazlavieri.com.br/
[ICQ]
edileyoliveira
Debugger

Membro desde: 02/06/2008 14:52:50
Mensagens: 62
Offline

Lavieri wrote:se vc quer Maps ordenados então vc precisa usar TreeMap, e não HashMap... pelo que vc falou, vc quer ordenar o mapa pelo placar, e depois pelo nome, caso o placar seja igual...

1° lugar o seguinte... pra que o MAP ? não entendi a função dele.. qual a função do Integer, Placa ?? ... enfim não vou entrar no merito disso... c vc ker ordenar... então seria assim

vc precisa comparar o value e não a key, então vai ter q fazer um comparator 1 pouco complicado... veja abaixo como seria...



ai vai ter q falar para o comparator quem é o map, se não fica impossivel descobrir os placares, já que a ordem de um Map é feito pela KEY e não pelo value...



Criado assim o meu TreeMap, ele vai ser ordenado automaticamente a cada entrada... vai sempre se manter na ordem especificada pelo Comparator, é so ir adcionando os dadas...


Ae, vlw pela ajuda, ja deu uma clareada nas idéias, mas eu preciso fazer tudo dentro na classe records, eu falei errado, é com treemap mesmo que tenho que usar.

Mas é que nem acabei de falar, a ordenação e tudo tem quer ser dentro da classe records. Pois o professor flw as classes que deveriamos ter. E que naum era para usar outras classes alem das que ele passou.
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Ele não disse que você não pode usar uma classe anônima (por definição, as classes anônimas não têm nomes, e portanto não estão na lista de classes que seu professor deixou usar.) Além disso, Comparator é uma interface, não uma classe, portanto seu professor tem de deixar usar isso.

Em vez de


você tem de usar:
[WWW]
edileyoliveira
Debugger

Membro desde: 02/06/2008 14:52:50
Mensagens: 62
Offline

Desculpe a ignorancia, mas como a minha classe placar tem que ficar, ela fica como esta ou tenho que altera-la?
Pois nessa parte aqui


fala que eu naum tenho o metodo get na placar.
Outra duvida, na classe records terei que usar algum outro tipo de coleção ou apenas o treemap? Se for somente o treemap, na medida que eu for inserindo nele, ele ja insere ordenado?

Tem como alguem me dar um pequeno exemplo como eu faria para inserir um placar no records, e depois como eu obter os records separando o nome do jogador que vai ser mostrado em um label e a pontuação em outro label.

This message was edited 1 time. Last update was at 13/04/2009 16:30:59

edileyoliveira
Debugger

Membro desde: 02/06/2008 14:52:50
Mensagens: 62
Offline

up
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

edileyoliveira wrote:Desculpe a ignorancia, mas como a minha classe placar tem que ficar, ela fica como esta ou tenho que altera-la?
Pois nessa parte aqui


fala que eu naum tenho o metodo get na placar.

placar nesse caso seria uma Collection, não um Placar.

edileyoliveira wrote:
Outra duvida, na classe records terei que usar algum outro tipo de coleção ou apenas o treemap? Se for somente o treemap, na medida que eu for inserindo nele, ele ja insere ordenado?

TreeMaps já inserem ordenado.

This message was edited 1 time. Last update was at 13/04/2009 22:12:41

[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

edileyoliveira wrote:up


Não fique upando tópicos!

No lugar, que tal fornecer mais detalhes do que você tentou fazer com as dicas dos colegas?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

O problema é que você está ordenando um mapa. O mapa exige uma chave e um valor.

Sua chave poderia ser a pontuação, e o valor o nome do indivíduo. O problema é que duas pessoas não poderiam ter a mesma pontuação no placar, o que não faz sentido em nenhum jogo.

A classe pontuação contém os dois, nome e valor. Ela por sí só é uma entrada independente e , se for usada como chave de um map, ela não mapearia valor nenhum. Então, o ideal seria colocar um Set e não um Map. O TreeSet, assim como o TreeMap, já é uma lista ordenada de valores.

Observe o exemplo:

This message was edited 4 times. Last update was at 14/04/2009 09:46:56


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
edileyoliveira
Debugger

Membro desde: 02/06/2008 14:52:50
Mensagens: 62
Offline

ViniGodoy wrote:O problema é que você está ordenando um mapa. O mapa exige uma chave e um valor.

Sua chave poderia ser a pontuação, e o valor o nome do indivíduo. O problema é que duas pessoas não poderiam ter a mesma pontuação no placar, o que não faz sentido em nenhum jogo.

A classe pontuação contém os dois, nome e valor. Ela por sí só é uma entrada independente e , se for usada como chave de um map, ela não mapearia valor nenhum. Então, o ideal seria colocar um Set e não um Map. O TreeSet, assim como o TreeMap, já é uma lista ordenada de valores.



Ae Vini....obrigado por tentar me ajudar, mas eu preciso mesmo que seje um map, pois o professor flw que tem q ser um map.
Ele disse que eu teria que usar outra coleção e um map para ordenar, e que a ordenação que era para colocar os nomes de quem tinha a mesma pontuação em ordem alfabetica.
A juda que vcs estao me dando, esta clareando e muito minhas ideias, mas no exemplos vcs me mostraram como montar o treemap e como fazer a ordenação. Mas como sou iniciante em java e o professor não falou nd de como trabalhar com map, apenas flw q deveriamos usar e pronto. E eu soh sei trabalhar com lists, mas nd.
Eu tenho duvidas com farei para inserir o placar na records, naum sei se tenho que inserir primeiro na outra coleção para dpois jogar pro treemap, ou se eh o inverso. e tb naum sei como obter os records separando o nome da pontuação para poder jogar em labels ou textfilds separadados.
E tb tenho me limitar somente dentro das Classes Records, Placar e RecordsVIEW, fora as outras do jogo, mas toda a parte de records tem que ser nas tres.

Vcs me desculpem, mas estou começando agora em java, e nao tenho a mesma facilidade de vcs para entender as coisas, mesmo que sejam coisas novas, vc pelo menos ja tem facildade em java, ja eu não.

Eu pretento continuar no mundo java, sei que vai ser um longo caminho, mas preciso de um empurrao para eu começar ententer melhor.
O basico basico, ja sei até bem, mas agora o professor mudou muito o rumo, começando a trabalhar com MVC com Swing e coleções, com isso to meio perdido.

Conto com ajuda e compreenção de vcs.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline

edileyoliveira wrote:Ae Vini....obrigado por tentar me ajudar, mas eu preciso mesmo que seje um map, pois o professor flw que tem q ser um map.
Ele disse que eu teria que usar outra coleção e um map para ordenar, e que a ordenação que era para colocar os nomes de quem tinha a mesma pontuação em ordem alfabetica.


Nesse caso, faça um map de um placar para nada... Veja o exemplo abaixo:

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
edileyoliveira
Debugger

Membro desde: 02/06/2008 14:52:50
Mensagens: 62
Offline

Kra, muito obrigado, graças ao seu exemplo consegui fazer e tah rodando que eh uma beleza, eu soh naum consegui entender o funcionamento do metodos compareTo da classe Escore, e desse for tem como vc dar um explicada.
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team