DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

1

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.

Image of Docusign

Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free