O TreeMap
em Java é uma implementação da interface Map
que armazena os elementos em pares chave-valor, mas com uma diferença fundamental em relação ao HashMap
: ele ordena automaticamente os elementos com base nas chaves. Essa estrutura é útil quando é necessário manter os dados em ordem crescente, de acordo com a ordenação natural das chaves ou uma ordem personalizada definida por um comparador.
Características do TreeMap
- Ordenação Natural das Chaves O
TreeMap
organiza os elementos automaticamente em ordem crescente das chaves (quando as chaves implementam a interfaceComparable
), como números em ordem numérica ou strings em ordem alfabética. - Comparadores Personalizados Se precisar de uma ordem personalizada, você pode criar um
TreeMap
com um comparador customizado. Isso permite ordenar as chaves conforme qualquer lógica necessária, desde a ordem inversa até ordens complexas. - Navegação Eficiente O
TreeMap
é implementado como uma árvore de busca binária (geralmente uma Red-Black Tree). Isso permite a navegação eficiente e o uso de métodos adicionais para obter subconjuntos e navegar pelo mapa de forma ordenada. - Não Permite Chaves Nulas Ao contrário do
HashMap
, oTreeMap
não permite chavesnull
, pois isso interromperia a ordenação.
Principais Métodos do TreeMap
- put(K key, V value): Adiciona um par chave-valor ao mapa.
- get(Object key): Retorna o valor associado a uma chave específica.
- remove(Object key): Remove a entrada associada a uma chave.
- firstKey() e lastKey(): Retornam a primeira e a última chave, respectivamente, na ordem.
- subMap(K fromKey, K toKey): Retorna uma visualização do mapa, contendo elementos entre as chaves especificadas.
- descendingMap(): Retorna uma versão invertida do mapa, ordenada de maneira decrescente.
Exemplo de Uso do TreeMap
Vamos criar um exemplo de TreeMap
para armazenar nomes de cidades e suas populações, ordenando as cidades por ordem alfabética.
import java.util.TreeMap;
public class ExemploTreeMap {
public static void main(String[] args) {
TreeMap<String, Integer> populacaoCidades = new TreeMap<>();
// Adicionando pares chave-valor
populacaoCidades.put("São Paulo", 12300000);
populacaoCidades.put("Rio de Janeiro", 6748000);
populacaoCidades.put("Belo Horizonte", 2523000);
populacaoCidades.put("Curitiba", 1948000);
// Exibindo o TreeMap em ordem alfabética
System.out.println("População das cidades em ordem alfabética:");
for (String cidade : populacaoCidades.keySet()) {
System.out.println("Cidade: " + cidade + ", População: " + populacaoCidades.get(cidade));
}
// Acessando o primeiro e o último elemento
System.out.println("Primeira cidade: " + populacaoCidades.firstKey());
System.out.println("Última cidade: " + populacaoCidades.lastKey());
// Subconjunto de elementos
System.out.println("Subconjunto de cidades entre 'Belo Horizonte' e 'São Paulo':");
TreeMap<String, Integer> subMapa = new TreeMap<>(populacaoCidades.subMap("Belo Horizonte", "São Paulo"));
subMapa.forEach((cidade, populacao) -> System.out.println("Cidade: " + cidade + ", População: " + populacao));
}
}
Explicação do Código
- Criação do TreeMap: Criamos um
TreeMap
chamadopopulacaoCidades
, onde as chaves (String
) representam os nomes das cidades e os valores (Integer
) representam suas populações. - Ordenação Alfabética: Por padrão, o
TreeMap
ordena as chaves em ordem alfabética. - Primeiro e Último Elemento: Utilizamos
firstKey()
elastKey()
para obter o primeiro e o último elemento do mapa. - Subconjunto de Cidades: Usamos o método
subMap()
para obter um subconjunto do mapa entre duas chaves especificadas.
Quando Usar o TreeMap
O TreeMap
é ideal quando você precisa que os elementos estejam ordenados com base nas chaves. Aqui estão alguns cenários onde o TreeMap
pode ser a melhor escolha:
- Listas classificadas automaticamente: Como uma lista de usuários ordenada por nome ou de produtos ordenados por preço.
- Intervalos de dados: Quando você precisa acessar ou manipular intervalos específicos de dados.
- Navegação por ordem: Quando a navegação por ordem crescente ou decrescente é uma prioridade.
Conclusão
O TreeMap
é uma estrutura de dados versátil para mapear dados chave-valor com ordenação automática. Em comparação com o HashMap
, que é focado em velocidade de acesso sem ordenação, o TreeMap
permite navegação e manipulação de dados em uma ordem específica, útil para aplicações que exigem organização e fácil visualização dos dados.