HOWTO · Java

Encontre um conjunto de intersecção em Java

Este artigo apresenta como encontrar a interseção de conjuntos em Java.

O termo Set é uma interface presente no pacote java.util. Um conjunto é uma interface de coleção que armazena listas não ordenadas e não permite o armazenamento de entidades duplicadas. Matematicamente, a interface do conjunto possui três propriedades.

  1. Os elementos do Conjunto não são nulos.
  2. Dois elementos no Conjunto não podem ser iguais.
  3. Um conjunto não preserva o pedido de inserção.

Use a inserção de conjunto e encontre a interseção de conjunto em Java

Você pode ver o programa abaixo, que demonstra a inserção de Set e como encontrar a interseção entre dois conjuntos em Java.

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class SetIntersection {
  public static void main(String[] args) {
    Set<Integer> s1 = new HashSet<>();
    s1.add(2);
    s1.add(7);
    s1.add(1);
    System.out.println("Set1: " + s1);
    List list = Arrays.asList(1, 7, 6, 8);
    Set<Integer> s2 = new HashSet<>(list);
    System.out.println("Set2: " + s2);
    Set<Integer> intersection = new HashSet<>(s1);
    intersection.retainAll(s2);
    System.out.println("Intersection: " + intersection);
  }
}

No código acima, um conjunto é declarado como a primeira etapa do processo. O novo HashSet cria uma nova instância da classe HashSet e atribui a referência formada à instância Set. A capacidade padrão de HashSet é 16 e o fator de carga é 0.75. A classe HashSet é compatível com a interface Set porque o HashSet implementa internamente a interface Set.

A variável s1 é inicializada usando o método add. A função adiciona o objeto do tipo definido à instância Set, considerando que o objeto não é nulo e não é duplicado. A função retorna booleano com base no fato de o valor ser inserido ou não. A função lança uma ClassCastException se a classe do elemento especificado não for semelhante à da instância Set. Ele lança uma NullPointerException se o elemento for um valor nulo e uma IllegalArgumentException se alguma propriedade do elemento proibir sua adição na coleção Set.

Outra maneira de criar um conjunto é usando a instância list passada para o parâmetro do construtor HashSet. A lista é inicializada com valores definidos usando o método asList da classe Arrays. A instância da lista é passada como um parâmetro no construtor HashSet. A coleção Set não preserva a ordem em que os elementos são armazenados.

Outra instância do Set é instanciada com a instância s1 como um parâmetro do construtor. Agora, esta referência de intersection invoca outro método que é a função reterAll. A função retém apenas os elementos que estão presentes na chamada da instância e na instância chamada. O método retorna booleano true quando o conjunto é alterado na operação retain. Ele lança uma UnsupportedOperationException se não suportar a operação sobre conjuntos. Ele lança uma ClassCastException se houver tipos de conjunto incompatíveis e uma NullPointerException se o Conjunto contiver um elemento nulo.

A saída da interseção acima entre os conjuntos é a seguinte.

Resultado:

Set1: [1, 2, 7]
Set2: [1, 6, 7, 8]
Intersection: [1, 7]