Fonte: https://www.devmedia.com.br/java-collections-como-utilizar-collections/18450
1 Introdução ao Set em Java
O que é a interface Set?
Uma coleção que não permite elementos duplicados.
Baseada em operações matemáticas de conjuntos (união, interseção, diferença).
Útil quando queremos garantir unicidade dos elementos.
Características principais:
Não permite duplicatas.
Pode armazenar valores nulos (exceto em algumas implementações como TreeSet com comparadores).
Ordem dos elementos depende da implementação utilizada.
2 Implementações principais do Set
HashSet
Características:
Baseado em uma tabela de dispersão (hash table).
Ordem dos elementos não é garantida. Um elemento pode ser incluído em qualquer ordem da lista.
Operações como add(), remove() e contains() são de tempo O(1) na média.
Aceita um elemento null.
Quando usar:
Quando a ordem dos elementos não é importante.
Quando se deseja alto desempenho para operações básicas.
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Maçã");
set.add("Banana");
set.add("Laranja");
set.add("Maçã"); // Duplicata, não será adicionada
System.out.println(set); // Ordem não garantida
}
}
LinkedHashSet
Características:
Extende HashSet, mas mantém a ordem de inserção dos elementos.
Usa uma lista duplamente ligada para manter a ordem.
Desempenho ligeiramente inferior ao HashSet devido à manutenção da ordem.
Lembrete:
Na estrutura de uma Lista Duplamente Ligada cada nó contém:
Um valor ou dado (por exemplo, um objeto ou número).
Uma referência para o próximo nó na lista.
Uma referência para o nó anterior.
Na estrutura com conexão bidirecional:
- Permite navegar para frente (do início ao fim) e para trás (do fim ao início).
Quando usar:
Quando é necessário preservar a ordem de inserção.
Ideal para aplicações onde a previsibilidade da iteração é importante.
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("Maçã");
set.add("Banana");
set.add("Laranja");
System.out.println(set); // Ordem de inserção preservada
}
}
TreeSet
Características:
Baseado em uma árvore rubro-negra (Red-Black Tree) - árvore binária de busca balanceada.
Mantém os elementos em ordem natural (ou por um comparador personalizado).
Tempo de operações como add(), remove() e contains() é O(log n).
Não permite elementos nulos, pois não sabe como compará-los.
Quando usar:
Quando é necessário manter os elementos ordenados automaticamente.
Quando precisamos realizar operações de pesquisa com ordenação eficiente.
import java.util.TreeSet;
import java.util.Set;
public class TreeSetExample {
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("Maçã");
set.add("Banana");
set.add("Laranja");
System.out.println(set); // Elementos em ordem alfabética
}
}
Comparação entre as implementações
Diferenças entre Set, List e Queue
Set: Não permite duplicatas, foco na unicidade.
List: Permite duplicatas, mantém ordem de inserção.
Queue: Segue regras de fila (FIFO), útil para processamento sequencial.
Top comments (0)