Ordenação de um HashMap

Fala Pessoal!

Preciso de uma ajuda.

Como eu posso ordernar um HashMap pelo valor do objeto e não pela chave?

Segue o código que eu estou utilizando.

HashMap Lista = new HashMap(); 
Lista.put(campoRG.getText(), func);

Como eu posso ordernar pelo func?

Valeu!

HashMaps não podem ser ordenados; copie o valor do HashMap para um TreeMap.
Além disso, como você quer ordenar pelo valor e não pela chave, você tem de “inverter” o Map - estou supondo que não há valores repetidos.

Ok, obrigado!!

[quote=sumihara]Fala Pessoal!

Preciso de uma ajuda.

Como eu posso ordernar um HashMap pelo valor do objeto e não pela chave?
[/quote]

Vc não pode. Nem com HashMap, nem com TreeMap( que ordena a chave).

Cloque os valores em um List e ordene o list.

hummm…

eu consigo colocar um hashmap dentro de um List?

[quote=sumihara]hummm…

eu consigo colocar um hashmap dentro de um List?[/quote]

Ate pode, mas nao teria efeito pro que vc quer (ordenar).

Vc pode é colocar esses objetos dentro de um List, ao inves de um Map. E entao ordena-lo, de varias maneiras diferentes.

Caso esses objetos sejam algo como String, ou Integer, um Collections.sort( suaLista ) ja resolveria. (Pois usaria a ordenacao natural)
No caso de vc ter por exemplo varios objetos Carro na lista, e quisesse ordenar pela placa do carro, poderia usar um Comparator pra isso.

[quote=sumihara]hummm…

eu consigo colocar um hashmap dentro de um List?[/quote]

Sim, mas nao é isso que vc quer. Vc quer colocar os valores no list

[code]
List listaValores = new ArrayList(hashmap.values());
Collections.sort(listaValores );

// listaValores está ordenada (supondo que os objetos dentro dela são ordenáveis)[/code]

Cara, eu passei pelo mesmo problema quando implementei o Algoritmo de Kruskal.
Eu fiquei praticamente a manhã toda procurando, até que chegou na hora do almoço e me enervei. Apesar de ser a maneira mais custosa, eu armazenei em duas listas (uma para a chave e outra para o value) e ordendei. Depois, criava um novo HashMap e inseria os elementos ordenados. Eu sei, é caro (no sentido de complexidade espacial), mas eu não vi jeito melhor de fazer.
Tanto que eu fiquei com a consciência pesada (porque achei que ia custar demais, dependendo da entrada) que tirei o HashMap e usei duas listas mesmo.

[editado]
Ah, só pra constar, eu não usei o sort de Collections porque precisava mexer as chaves nas mesmas proporções dos values.
Vou dar uma procurada no HD. Se eu achar, eu posto aqui.
[/editado]

Tudo depende de para quê vc quer ordenar os valores.
Se a ideia é apenas ter a mesma ordem de inserção , use LinkedHashMap.
Agora , se a ideia é poder obter o valor por uma chave e mesmo assim manter a lista de valores ordenada
use um HashMap e um List. Crie um objeto - HashListMap que contem ambos com uma interface como a do Map.
quando vc der o put, coloque o objeto no map e no list. Lembre-se que o java não copiará o objeto então não ha 'mais peso" em suar os dois collections juntos.

Uma outra opção, que seria a eu usaria se precisasse fazer isso, seria criar uma chave especial que mantem uma referencia ai valor.
Essa chave é ordenável pelo valor (comparator) mas casada pelo equals. Ai usa um TreeMap onde o hashcode é irrelevante.
Dá uma poucquinho de trabalho mas pode usar o TreeMap padrão e fazer a sua propria chave não é assim tão dificil.
O TreeMap manterá as chaves ordenadas, mas como a ordem delas é a mesma que a dos valores, os valores tb estarão ordenados.

Fala Pessoa!!

Valeu pela ajuda… vou realizar alguns testes aqui!

Obrigado!