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 Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)