Dominando Java LinkedHashSet: Recursos, Métodos e Exemplos Práticos
Java LinkedHashSet
Neste tutorial, aprenderemos sobre a classe Java LinkedHashSet e seus métodos com a ajuda de exemplos.
A classe LinkedHashSet do framework de coleções do Java fornece funcionalidades de ambas as estruturas de dados hashtable e lista encadeada.
Ela implementa a interface Set.
Elementos do LinkedHashSet são armazenados em tabelas hash similares ao HashSet.
No entanto, linked hash sets mantêm uma lista duplamente encadeada internamente para todos os seus elementos. A lista encadeada define a ordem em que elementos são inseridos nas tabelas hash.
Criar um LinkedHashSet
Para criar um linked hash set, devemos importar o pacote java.util.LinkedHashSet primeiro.
Uma vez importado o pacote, aqui está como podemos criar linked hash sets no Java.
// LinkedHashSet com capacidade 8 e fator de carga 0.75
LinkedHashSet<Integer> numeros = new LinkedHashSet<>(8, 0.75);
Aqui, criamos um linked hash set chamado numeros.
Observe, a parte new LinkedHashSet<>(8, 0.75). Aqui, o primeiro parâmetro é capacidade e o segundo parâmetro é fatorDeCarga.
- capacidade - A capacidade deste hash set é 8. Significa que pode armazenar 8 elementos.
- fatorDeCarga - O fator de carga deste hash set é 0.6. Isso significa que, sempre que nossa tabela hash for preenchida em 60%, os elementos são movidos para uma nova tabela hash do dobro do tamanho da original.
Capacidade e fator de carga padrão
É possível criar um linked hash set sem definir sua capacidade e fator de carga. Por exemplo,
// LinkedHashSet com capacidade e fator de carga padrão
LinkedHashSet<Integer> numeros1 = new LinkedHashSet<>();
Por padrão,
- a capacidade do linked hash set será 16
- o fator de carga será 0.75
Criando LinkedHashSet a Partir de Outras Coleções
Aqui está como podemos criar um linked hash set contendo todos os elementos de outras coleções.
import java.util.LinkedHashSet;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
// Criando um arrayList de números pares
ArrayList<Integer> numerosPares = new ArrayList<>();
numerosPares.add(2);
numerosPares.add(4);
System.out.println("ArrayList: " + numerosPares);
// Criando um LinkedHashSet a partir de um ArrayList
LinkedHashSet<Integer> numeros = new LinkedHashSet<>(numerosPares);
System.out.println("LinkedHashSet: " + numeros);
}
}
Saída
ArrayList: [2, 4] LinkedHashSet: [2, 4]
Métodos do LinkedHashSet
A classe LinkedHashSet fornece métodos que nos permitem realizar várias operações no linked hash set.
Inserir Elementos no LinkedHashSet
add()- insere o elemento especificado no linked hash setaddAll()- insere todos os elementos da coleção especificada no linked hash set
Por exemplo,
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numeroPar = new LinkedHashSet<>();
// Usando método add()
numeroPar.add(2);
numeroPar.add(4);
numeroPar.add(6);
System.out.println("LinkedHashSet: " + numeroPar);
LinkedHashSet<Integer> numeros = new LinkedHashSet<>();
// Usando método addAll()
numeros.addAll(numeroPar);
numeros.add(5);
System.out.println("Novo LinkedHashSet: " + numeros);
}
}
Saída
LinkedHashSet: [2, 4, 6] Novo LinkedHashSet: [2, 4, 6, 5]
Acessar Elementos do LinkedHashSet
Para acessar os elementos de um linked hash set, podemos usar o método iterator(). Para usar este método, devemos importar o pacote java.util.Iterator. Por exemplo,
import java.util.LinkedHashSet;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numeros = new LinkedHashSet<>();
numeros.add(2);
numeros.add(5);
numeros.add(6);
System.out.println("LinkedHashSet: " + numeros);
// Chamando o método iterator()
Iterator<Integer> iterar = numeros.iterator();
System.out.print("LinkedHashSet usando Iterator: ");
// Acessando elementos
while(iterar.hasNext()) {
System.out.print(iterar.next());
System.out.print(", ");
}
}
}
Saída
LinkedHashSet: [2, 5, 6] LinkedHashSet usando Iterator: 2, 5, 6,
Nota:
hasNext()retornatruese há um próximo elemento no linked hash setnext()retorna o próximo elemento no linked hash set
Remover Elementos do HashSet
remove()- remove o elemento especificado do linked hash setremoveAll()- remove todos os elementos do linked hash set
Por exemplo,
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numeros = new LinkedHashSet<>();
numeros.add(2);
numeros.add(5);
numeros.add(6);
System.out.println("LinkedHashSet: " + numeros);
// Usando o método remove()
boolean valor1 = numeros.remove(5);
System.out.println("5 foi removido? " + valor1);
boolean valor2 = numeros.removeAll(numeros);
System.out.println("Todos elementos removidos? " + valor2);
}
}
Saída
LinkedHashSet: [2, 5, 6] 5 foi removido? true Todos elementos removidos? true
Operações de Conjunto
Os vários métodos da classe LinkedHashSet 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 método addAll(). Por exemplo,
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numerosPares = new LinkedHashSet<>();
numerosPares.add(2);
numerosPares.add(4);
System.out.println("LinkedHashSet1: " + numerosPares);
LinkedHashSet<Integer> numeros = new LinkedHashSet<>();
numeros.add(1);
numeros.add(3);
System.out.println("LinkedHashSet2: " + numeros);
// União de dois conjuntos
numeros.addAll(numerosPares);
System.out.println("União é: " + numeros);
}
}
Saída
LinkedHashSet1: [2, 4] LinkedHashSet2: [1, 3] União é: [1, 3, 2, 4]
Interseção de Conjuntos
Para realizar a interseção entre dois conjuntos, podemos usar o método retainAll(). Por exemplo
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numerosPrimos = new LinkedHashSet<>();
numerosPrimos.add(2);
numerosPrimos.add(3);
System.out.println("LinkedHashSet1: " + numerosPrimos);
LinkedHashSet<Integer> numerosPares = new LinkedHashSet<>();
numerosPares.add(2);
numerosPares.add(4);
System.out.println("LinkedHashSet2: " + numerosPares);
// Interseção de dois conjuntos
numerosPares.retainAll(numerosPrimos);
System.out.println("Interseção é: " + numerosPares);
}
}
Saída
LinkedHashSet1: [2, 3] LinkedHashSet2: [2, 4] Interseção é: [2]
Diferença de Conjuntos
Para calcular a diferença entre os dois conjuntos, podemos usar o método removeAll(). Por exemplo,
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numerosPrimos = new LinkedHashSet<>();
numerosPrimos.add(2);
numerosPrimos.add(3);
numerosPrimos.add(5);
System.out.println("LinkedHashSet1: " + numerosPrimos);
LinkedHashSet<Integer> numerosImpares = new LinkedHashSet<>();
numerosImpares.add(1);
numerosImpares.add(3);
numerosImpares.add(5);
System.out.println("LinkedHashSet2: " + numerosImpares);
// Diferença entre LinkedHashSet1 e LinkedHashSet2
numerosPrimos.removeAll(numerosImpares);
System.out.println("Diferença: " + numerosPrimos);
}
}
Saída
LinkedHashSet1: [2, 3, 5] LinkedHashSet2: [1, 3, 5] Diferença: [2]
Subconjunto
Para verificar se um conjunto é subconjunto de outro conjunto ou não, podemos usar o método containsAll(). Por exemplo,
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numeros = new LinkedHashSet<>();
numeros.add(1);
numeros.add(2);
numeros.add(3);
numeros.add(4);
System.out.println("LinkedHashSet1: " + numeros);
LinkedHashSet<Integer> numerosPrimos = new LinkedHashSet<>();
numerosPrimos.add(2);
numerosPrimos.add(3);
System.out.println("LinkedHashSet2: " + numerosPrimos);
// Verificar se numerosPrimos é subconjunto de numeros
boolean resultado = numeros.containsAll(numerosPrimos);
System.out.println("LinkedHashSet2 é subconjunto de LinkedHashSet1? " + resultado);
}
}
Saída
LinkedHashSet1: [1, 2, 3, 4] LinkedHashSet2: [2, 3] LinkedHashSet2 é subconjunto de LinkedHashSet1? true
Outros Métodos do LinkedHashSet
| Método | Descrição |
|---|---|
clone() | Cria uma cópia do LinkedHashSet |
contains() | Busca o LinkedHashSet pelo elemento especificado e retorna resultado booleano |
isEmpty() | Verifica se o LinkedHashSet está vazio |
size() | Retorna o tamanho do LinkedHashSet |
clear() | Remove todos os elementos do LinkedHashSet |
Para aprender mais sobre métodos do LinkedHashSet, visite Java LinkedHashSet (documentação oficial do Java).
LinkedHashSet Vs. HashSet
Ambos LinkedHashSet e HashSet implementam a interface Set. No entanto, existem algumas diferenças entre eles.
LinkedHashSetmantém uma lista encadeada internamente. Devido a isso, mantém a ordem de inserção de seus elementos.- A classe
LinkedHashSetrequer mais armazenamento queHashSet. Isso porqueLinkedHashSetmantém listas encadeadas internamente. - O desempenho do
LinkedHashSeté mais lento queHashSet. É por causa das listas encadeadas presentes noLinkedHashSet.
LinkedHashSet Vs. TreeSet
Aqui estão as principais diferenças entre LinkedHashSet e TreeSet:
- A classe
TreeSetimplementa a interfaceSortedSet. Por isso, elementos em um tree set são ordenados. No entanto, a classeLinkedHashSetapenas mantém a ordem de inserção de seus elementos. - Um
TreeSeté geralmente mais lento que umLinkedHashSet. É porque sempre que um elemento é adicionado a umTreeSet, ele tem que realizar a operação de ordenação. LinkedHashSetpermite a inserção de valores null. No entanto, não podemos inserir um valor null noTreeSet.
Java
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Comentários em Java: Tipos, Uso e Boas Práticas
- Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
- Dominando Strings em Java: Criação, Métodos e Boas Práticas
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código
- Entendendo o Java Vector: Uso, Recursos e Comparação com ArrayList