DEV Community

Set<E> em Java

Image description
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

Image description

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)