Neste tutorial, aprenderemos sobre a classe Java LinkedHashSet e seus métodos com a ajuda de exemplos.
A LinkedHashSet
classe 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 LinkedHashSet
sã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.LinkedHashSet
pacote 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 LinkedHashSet
classe 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 vinculadoaddAll()
- 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.Iterator
pacote. 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()
retornatrue
se houver um próximo elemento no conjunto de hash vinculadonext()
retorna o próximo elemento no conjunto de hash vinculado
Remover elementos do HashSet
remove()
- remove o elemento especificado do conjunto de hash vinculadoremoveAll()
- 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 LinkedHashSet
classe 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 LinkedHashSet elemento especificado e retorna um resultado booleano |
isEmpty() | Verifica se o LinkedHashSet está 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 thanHashSet
. This is becauseLinkedHashSet
maintains linked lists internally. - The performance of
LinkedHashSet
is slower thanHashSet
. It is because of linked lists present inLinkedHashSet
.
LinkedHashSet Vs. TreeSet
Here are the major differences between LinkedHashSet
and TreeSet
:
- A
TreeSet
classe implementa aSortedSet
interface. É por isso que os elementos em um conjunto de árvore são classificados. No entanto, aLinkedHashSet
classe mantém apenas a ordem de inserção de seus elementos. - A
TreeSet
é geralmente mais lento do que aLinkedHashSet
. É porque sempre que um elemento é adicionado a aTreeSet
, ele deve realizar a operação de classificação. LinkedHashSet
permite a inserção de valores nulos. No entanto, não podemos inserir um valor nulo paraTreeSet
.