Java HashSet

Neste tutorial, aprenderemos sobre a classe Java HashSet. Aprenderemos sobre diferentes métodos e operações de conjunto de hash com a ajuda de exemplos.

A HashSetclasse da estrutura Java Collections fornece as funcionalidades da estrutura de dados da tabela hash.

Ele implementa a interface Set.

Criação de um HashSet

Para criar um conjunto hash, devemos importar o java.util.HashSetpacote primeiro.

Depois de importar o pacote, aqui está como podemos criar conjuntos hash em Java.

 // HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75); 

Aqui, criamos um conjunto hash chamado numbers.

Observe, a parte nova HashSet(8, 0.75). Aqui, o primeiro parâmetro é a capacidade e o segundo parâmetro é loadFactor .

  • capacidade - A capacidade deste conjunto hash é 8. Ou seja, ele pode armazenar 8 elementos.
  • loadFactor - O fator de carga deste conjunto hash é 0,6. Isso significa que, sempre que nosso conjunto hash é preenchido em 60%, os elementos são movidos para uma nova tabela hash com o dobro do tamanho da tabela hash original.

Capacidade padrão e fator de carga

É possível criar uma tabela hash sem definir sua capacidade e fator de carga. Por exemplo,

 // HashSet with default capacity and load factor HashSet numbers1 = new HashSet(); 

Por padrão,

  • a capacidade do conjunto hash será de 16
  • o fator de carga será 0,75

Métodos de HashSet

A HashSetclasse fornece vários métodos que nos permitem realizar várias operações no conjunto.

Inserir elementos no HashSet

  • add() - insere o elemento especificado no conjunto
  • addAll() - insere todos os elementos da coleção especificada no conjunto

Por exemplo,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) ) 

Resultado

 HashSet: (2, 4, 6) Novo HashSet: (2, 4, 5, 6) 

Acessar elementos HashSet

Para acessar os elementos de um conjunto hash, podemos usar o iterator()método. Para usar este método, devemos importar o java.util.Iteratorpacote. Por exemplo,

 import java.util.HashSet; import java.util.Iterator; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Resultado

 HashSet: (2, 5, 6) HashSet usando Iterator: 2, 5, 6, 

Remover Elementos

  • remove() - remove o elemento especificado do conjunto
  • removeAll() - remove todos os elementos do conjunto

Por exemplo,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) ) 

Resultado

HashSet: (2, 5, 6) O 5 foi removido? true Todos os elementos foram removidos? verdade

Operações de conjunto

Os vários métodos da HashSetclasse também podem ser usados ​​para realizar várias operações de conjunto.

União de Conjuntos

Para realizar a união entre dois conjuntos, podemos usar o addAll()método. Por exemplo,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + numbers); ) ) 

Resultado

 HashSet1: (2, 4) HashSet2: (1, 3) União é: (1, 2, 3, 4) 

Intersecção de conjuntos

Para realizar a interseção entre dois conjuntos, podemos usar o retainAll()método. Por exemplo

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) ) 

Resultado

 HashSet1: (2, 3) HashSet2: (2, 4) A interseção é: (2) 

Diferença de conjuntos

Para calcular a diferença entre os dois conjuntos, podemos usar o removeAll()método. Por exemplo,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) ) 

Resultado

 HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Diferença: (2) 

Subconjunto

Para verificar se um conjunto é um subconjunto de outro conjunto ou não, podemos usar o containsAll()método. Por exemplo,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) ) 

Resultado

HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) O HashSet2 é um subconjunto de HashSet1? verdade

Outros métodos de HashSet

Método Descrição
clone() Cria uma cópia do HashSet
contains() Procura o HashSetelemento especificado e retorna um resultado booleano
isEmpty() Verifica se o HashSetestá vazio
size() Retorna o tamanho do HashSet
clear() Remove todos os elementos do HashSet

Para saber mais sobre os métodos HashSet, visite Java HashSet (documentação oficial do Java).

Por que HashSet?

Em Java, HashSeté comumente usado se tivermos que acessar elementos aleatoriamente. Isso ocorre porque os elementos em uma tabela hash são acessados ​​usando códigos hash.

O código hash de um elemento é uma identidade única que ajuda a identificar o elemento em uma tabela hash.

HashSetnão pode conter elementos duplicados. Portanto, cada elemento do conjunto hash tem um código hash exclusivo.

Nota: HashSet não está sincronizado. Isto é, se vários threads acessam o conjunto de hash ao mesmo tempo e um dos threads modifica o conjunto de hash. Em seguida, ele deve ser sincronizado externamente.

Artigos interessantes...