Estou cursando Java na facul e estou precisando ordenar um HashMap que contém String nas chaves (K) e um objeto que guarda dados dessa chave no campo valores (V), por meio de atributos.
Alguém tem uma ideia? Pensei em usar um TreeMap como estrutura auxiliar, no qual insiro um atributo único do objeto que está em V como chave no TreeMap e o mesmo objeto completo como valor em V, por meio de um for - mas não sei quais métodos usar.
Obs.: Posso trocar de HashMap para outro mapa, porém tem que ser mapa
Se puder dar um exemplo dos dados que quer guardar e em qual ordem eles devem estar, ficaria mais fácil entender.
De qualquer forma, o TreeMap já é um mapa que é ordernado pela key. Se quer ordernar pela key, nao precisa dele como estrutura auxiliar, use ele diretamente.
O meu grande problema é que eu tenho que guardar várias informações por entrada de mapa.
Por exemplo: meuHashMap.put(“TimeDeFutebol”, new criaTime(1, 2, 3));
onde 1, 2, 3 são dados integer que correspondem a vitorias, empates e ranking.
quero, agora, ordenar esse mapa colocando o atributo ranking como chave no treemap para obter a ordenação automatica e o objeto gerado pelo criaTime no campo de valor do TreeMap.
Por definição, um HashMap não tem ordenação, você tem que usar um TreeMap mesmo. Por ser uma árvore, o TreeMap mantém as chaves ordenadas independentemente da ordem em que você as insere.
também é possivel implementar a interface comparator em seu objeto, para que ele possa avaliar as prioridades de organização.
modelo
class Compare implements Comparator<CustomObject>{
Map<CustomObject,Integer> map;
/**
* Constructs our map
* @param map map to be sorted.
*/
public Compare(Map<CustomObject,Integer> map){
this.map = map;
}
/**
* Performs the comparison between two entries.
*/
public int compare(CustomObject left, CustomObject right){
return map.get(left).compareTo(map.get(right));
}
}
Assim ela saberá como ordenar, sem a necessidade de usar o TreeMa, porém levara algum custo para entender a interface.
Valeu Jonathan, confesso que vai levar um tempinho pra entender seu code rs. Bom eu fiz assim (ainda não testei):
while (condição) {
meuTreeMap.put (time.rank, time);
}
Os cálculos para decidir o rank de cada time são feitos antes de inserir no TreeMap. Foi mal mas como to aprendendo vou sempre escolher o code mais simples abc e obg!
Quando ver conceitos de interface ficará mais claro, mas tiro o chapéu por esta implementando API avançadas, digo em meu curso, não se passaram do arraylist. TT haha, Bora o/