Ordenar HashMap com uso de um TreeMap

Bom dia povo! Meu primeiro post.

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

Abc e obrigado

Eu nao entendi o que você precisa exatamente.

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.

1 curtida

Obrigado pela sua resposta, Abel.

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.

Grande abraço e obrigado!

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.

1 curtida

Show mendes, muito obrigado. Então acho que o TreeMap será uma boa estrutura auxiliar pra ordenar meu mapa, abc

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 :smile: abc e obg!

2 curtidas

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/

Show de bola bro, super obrigado! Vou caçando aqui como vou entregar essa avaliação, abc e obg!