TreeSet no Java: Fundamentos e Aplicações Práticas

O TreeSet é uma coleção ordenada na linguagem Java, projetada para armazenar elementos exclusivos em uma sequência específica. Esta estrutura de dados herda de AbstractSet e implementa as interfaces NavigableSet, Cloneable e Serializable.

Internamente, o TreeSet é sustentado por uma implementação baseada no TreeMap, garantindo que os elementos sejam orgenizados de forma consistente. A ordenação pode ser natural (crescente) ou definida por um Compraator personalizado, dependendo do construtor utilizado. Embora seu desempenho seja inferior ao do HashSet em operações gerais, o TreeSet é ideal quando a ordenação dos dados é necessária.

Hierarquia de Herança

java.lang.Object
   ↳ java.util.AbstractCollection<E>
         ↳ java.util.AbstractSet<E>
               ↳ java.util.TreeSet<E>

public class TreeSet<E> extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, java.io.Serializable

O TreeSet mantém uma referência interna para um NavigableMap, que é uma instância de TreeMap, facilitando a gestão dos elementos ordenados.

Percorrendo Elementos

Existem múltiplas formas de iterar sobre um TreeSet. A seguir, exemplos adaptados para ilustrar cada abordagem:

// Iteração ascendente usando Iterator
Set<String> conjuntoOrdenado = new TreeSet<>();
conjuntoOrdenado.add("Bravo");
conjuntoOrdenado.add("Alfa");
conjuntoOrdenado.add("Delta");
Iterator<String> iterador = conjuntoOrdenado.iterator();
while (iterador.hasNext()) {
    String elemento = iterador.next();
    System.out.println(elemento);
}
// Iteração descendente
Iterator<String> iteradorInvertido = conjuntoOrdenado.descendingIterator();
while (iteradorInvertido.hasNext()) {
    System.out.println(iteradorInvertido.next());
}
// Uso de for-each após conversão para array
String[] arrayDeElementos = conjuntoOrdenado.toArray(new String[0]);
for (String item : arrayDeElementos) {
    System.out.println("Item: " + item);
}

O TreeSet não suporta acesso aleatório direto; a iteração é o único método recomendado para percorrer seus elementos.

Exemplo Básico de Utilização

O código a seguir demonstra a criação e manipulação de um TreeSet com elementos de caractere:

import java.util.TreeSet;

public class DemonstracaoTreeSet {
    public static void main(String[] argumentos) {
        TreeSet<Character> colecaoCaracteres = new TreeSet<>();
        colecaoCaracteres.add('X');
        colecaoCaracteres.add('M');
        colecaoCaracteres.add('A');
        colecaoCaracteres.add('Z');
        System.out.println("Coleção ordenada: " + colecaoCaracteres);
    }
}

Este programa produzirá a saída: [A, M, X, Z], mostrando a ordenação natural dos caracteres.

Construtores Disponíveis

Tipo Descrição
TreeSet() Cria um conjunto vazio, ordenado naturalmente em ordem crescente.
TreeSet(Collection<? extends E> c) Inicializa com os elementos de outra coleção, mantendo a ordenação.
TreeSet(Comparator<? super E> comparator) Cria um conjunto vazio com uma ordanação personalizada via Comparator.
TreeSet(SortedSet<E> s) Constrói um TreeSet a partir de um SortedSet existente.

Principais Métodos

Método Funcionalidade
boolean add(E e) Insere um elemento no conjunto se não estiver presente.
void clear() Remove todos os elementos do conjunto.
boolean contains(Object o) Verifica se um elemento específico está contido no conjunto.
E first() Retorna o menor elemento atualmente no conjunto.
E last() Retorna o maior elemento atualmente no conjunto.
Iterator<E> iterator() Retorna um iterador para percorrer os elementos em ordem ascendente.
boolean remove(Object o) Exclui um elemento específico do conjunto, se existir.
int size() Devolve o número total de elementos armazenados.
SortedSet<E> subSet(E fromElement, E toElement) Cria uma visão parcial do conjunto dentro de um intervalo especificado.
SortedSet<E> headSet(E toElement) Retorna uma visão dos elementos menores que o parâmetro fornecido.
SortedSet<E> tailSet(E fromElement) Retorna uma visão dos elementos maiores ou iguais ao parâmetro.

Tags: java TreeSet Collections NavigableSet TreeMap

Publicado em 6-7 05:17 por Thomas