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 HashSet
classe 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.HashSet
pacote 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 HashSet
classe 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 conjuntoaddAll()
- 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.Iterator
pacote. 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 conjuntoremoveAll()
- 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 HashSet
classe 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 HashSet elemento especificado e retorna um resultado booleano |
isEmpty() | Verifica se o HashSet está 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.
HashSet
nã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.