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. |