Java LinkedHashSet

Neste tutorial, aprenderemos sobre a classe Java LinkedHashSet e seus métodos com a ajuda de exemplos.

A LinkedHashSetclasse da estrutura de coleções Java fornece funcionalidades da tabela de hash e da estrutura de dados de lista vinculada.

Ele implementa a interface Set.

Os elementos de LinkedHashSetsão armazenados em tabelas hash semelhantes ao HashSet.

No entanto, os conjuntos de hash vinculados mantêm uma lista duplamente vinculada internamente para todos os seus elementos. A lista vinculada define a ordem em que os elementos são inseridos nas tabelas hash.

Crie um LinkedHashSet

Para criar um conjunto de hash vinculado, devemos importar o java.util.LinkedHashSetpacote primeiro.

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

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

Aqui, criamos um conjunto de hash vinculado denominado números.

Observe, a parte new LinkedHashSet(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 nossa tabela hash é preenchida 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 um conjunto hash vinculado sem definir sua capacidade e fator de carga. Por exemplo,

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

Por padrão,

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

Criação de LinkedHashSet de outras coleções

Aqui está como podemos criar um conjunto de hash vinculado contendo todos os elementos de outras coleções.

 import java.util.LinkedHashSet; import java.util.ArrayList; class Main ( public static void main(String() args) ( // Creating an arrayList of even numbers ArrayList evenNumbers = new ArrayList(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); // Creating a LinkedHashSet from an ArrayList LinkedHashSet numbers = new LinkedHashSet(evenNumbers); System.out.println("LinkedHashSet: " + numbers); ) ) 

Resultado

 ArrayList: (2, 4) LinkedHashSet: (2, 4) 

Métodos de LinkedHashSet

A LinkedHashSetclasse fornece métodos que nos permitem realizar várias operações no conjunto de hash vinculado.

Inserir elementos em LinkedHashSet

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

Por exemplo,

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

Resultado

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

Acessar elementos LinkedHashSet

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

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

Resultado

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

Nota :

  • hasNext()retorna truese houver um próximo elemento no conjunto de hash vinculado
  • next() retorna o próximo elemento no conjunto de hash vinculado

Remover elementos do HashSet

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

Por exemplo,

 import java.util.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("LinkedHashSet: " + numbers); // Using the 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

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

Operações de conjunto

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

União de Conjuntos

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

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

Resultado

 LinkedHashSet1: (2, 4) LinkedHashSet2: (1, 3) Union is: (1, 3, 2, 4) 

Intersecção de conjuntos

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

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

Resultado

 LinkedHashSet1: (2, 3) LinkedHashSet2: (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.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet oddNumbers = new LinkedHashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); // Difference between LinkedHashSet1 and LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) ) 

Resultado

 LinkedHashSet1: (2, 3, 5) LinkedHashSet2: (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.LinkedHashSet; class Main ( public static void main(String() args) ( LinkedHashSet numbers = new LinkedHashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet primeNumbers = new LinkedHashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result); ) ) 

Resultado

LinkedHashSet1: (1, 2, 3, 4) LinkedHashSet2: (2, 3) LinkedHashSet2 é um subconjunto de LinkedHashSet1? verdade

Outros métodos de LinkedHashSet

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

To learn more about LinkedHashSet methods, visit Java LinkedHashSet (official Java documentation).

LinkedHashSet Vs. HashSet

Both LinkedHashSet and HashSet implements the Set interface. However, there exist some differences between them.

  • LinkedHashSet maintains a linked list internally. Due to this, it maintains the insertion order of its elements.
  • The LinkedHashSet class requires more storage than HashSet. This is because LinkedHashSet maintains linked lists internally.
  • The performance of LinkedHashSet is slower than HashSet. It is because of linked lists present in LinkedHashSet.

LinkedHashSet Vs. TreeSet

Here are the major differences between LinkedHashSet and TreeSet:

  • A TreeSetclasse implementa a SortedSetinterface. É por isso que os elementos em um conjunto de árvore são classificados. No entanto, a LinkedHashSetclasse mantém apenas a ordem de inserção de seus elementos.
  • A TreeSeté geralmente mais lento do que a LinkedHashSet. É porque sempre que um elemento é adicionado a a TreeSet, ele deve realizar a operação de classificação.
  • LinkedHashSetpermite a inserção de valores nulos. No entanto, não podemos inserir um valor nulo para TreeSet.

Artigos interessantes...