English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Java

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Tratamento de Exceções Java

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

LinkedHashMap Java

在本教程中,我们将借助示例学习Java LinkedHashMap类及其操作。

Java集合框架的LinkedHashMap类提供了Map接口的哈希表和链表实现。

LinkedHashMap继承了HashMap类,以将其条目存储在哈希表中。它在内部在所有条目之间维护一个双链列表,以对条目进行排序。

创建一个LinkedHashMap

为了创建双向链表,我们必须先导入java.util.LinkedHashMap包。导入程序包后,可以使用以下方法在Java中创建双向链表。

//LinkedHashMap的初始容量为8,载荷因子为0.6
LinkedHashMap<Key, Value> numbers = new LinkedHashMap<>(8, 0.6f);

No código acima, criamos umLinkedHashMap chamadonumbers.

Aqui,

  • Key - usado para identificar de forma única cada elemento (valor) no mapa

  • Value - os elementos associados às chaves no mapa

Notar new LinkedHashMap<>(8,0.6) Esta parte. Aqui, o primeiro parâmetro écapacity, o segundo parâmetro éloadFactor.

  • capacity -  A capacidade dessa lista duplamente encadeada é8. Isso significa que ele pode armazenar8itens.

  • loadFactor- O fator de carga dessa lista duplamente encadeada é 0.6. Isso significa que sempre que o hash map estiver completo60% quando o item será movido para um novo hash table, cujo tamanho é o dobro do hash table original.

Capacidadeegefatordecarga padrão

Não há necessidade de definir sua capacidade e fator de carga para criar uma lista duplamente encadeada. Por exemplo,

//LinkedHashMapcomcapacidadeegefatordecarga padrão
LinkedHashMap<Key, Value> numbers1 = new LinkedHashMap<>();

Padrão,

  • Acapacidade da lista duplamente encadeada será 16

  • Ofator de carga será 0.75

Notar:LinkedHashMapclassepermitemnossedefiniraordemdositens.Exemplo

//LinkedHashMapcomordemespecificada
LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);

Aqui,accessOrderé um valor booleano. O valor padrão éfalse.Neste caso, os itens na lista duplamente encadeada serão ordenados pela ordem de inserção.

Mas, se o valor deaccessOrderfor true, os itens na lista duplamente encadeada serão ordenados pela ordem de acesso mais recente.

CriandoLinkedHashMapa partir de outra lista duplamente encadeada

A seguir está a criação de uma lista duplamente encadeada contendo todos os elementos de outros mapeamentos.

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        //CriandoLinkedHashMapde números pares
        LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        System.out.println("LinkedHashMap1: " + evenNumbers);
        //CriandoLinkedHashMapa partir de outroLinkedHashMap
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap2: " + numbers);
    {}
{}

输出结果

LinkedHashMap1: {Two=2, Four=4{}
LinkedHashMap2: {Two=2, Four=4, Three=3{}

MétodosdoLinkedHashMap

EsteLinkedHashMapclasseforneceno,permitindoqueefetuemosdiversasoperaçõesno mapa.

insira o elemento no LinkedHashMap

  • put() - insira a chave/o mapeamento de valores é inserido no mapeamento

  • putAll() -insira todos os itens do mapeamento especificado neste map

  • putIfAbsent() -se o map não contiver a chave especificada, insira a chave/o mapeamento de valores é inserido no map

例如,

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        // Criando LinkedHashMap de números pares
        LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
        // usando put()
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        System.out.println("LinkedHashMap original: " + evenNumbers);
        // usando putIfAbsent()
        evenNumbers.putIfAbsent("Six", 6);
        System.out.println("LinkedHashMap atualizado: " + evenNumbers);
        //Criando LinkedHashMap de numbers
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        // usando putAll()
        numbers.putAll(evenNumbers);
        System.out.println("novo LinkedHashMap: " + numbers);
    {}
{}

输出结果

LinkedHashMap original: {Two=2, Four=4{}
LinkedHashMap atualizado: {Two=2, Four=4, Six=6{}
novo LinkedHashMap: {One=1, Two=2, Four=4, Six=6{}

acessando elementos do LinkedHashMap

1.usando entrySet(), keySet() e values()

  • entrySet() -retorna todas as chaves do mapeamento/coleção de mapeamento de valores

  • keySet() - retorna a coleção de todas as chaves do map

  • values() - retorna a coleção de todos os valores do map

例如,

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap: " + numbers);
        // 
        System.out.println("Chave",/Mapeamento de Valores: " + numbers.entrySet());
        // usando keySet()
        System.out.println("Chaves (Chaves): " + numbers.keySet());
        // usando values()
        System.out.println("Valores (Valores): " + numbers.values());
    {}
{}

输出结果

LinkedHashMap: {One=1, Two=2, Three=3{}
Key/Value 映射: [One=1, Two=2, Three=3]
Keys(键): [One, Two, Three]
Values(值): [1, 2, 3]

2.使用 get() 和 getOrDefault()

  • get() - 返回与指定键关联的值。如果未找到键,则返回null。

  • getOrDefault() - 返回与指定键关联的值。如果找不到该键,它将返回指定的默认值。

例如,

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap: " + numbers);
        // 使用 get()
        int value1 = numbers.get("Three");
        System.out.println("返回数字: " + value1);
        // 使用 getOrDefault()
        int value2 = numbers.getOrDefault("Five", 5);
        System.out.println("返回数字: " + value2);
    {}
{}

输出结果

LinkedHashMap: {One=1, Two=2, Three=3{}
返回数字: 3
返回数字: 5

删除LinkedHashMap元素

  • remove(key) - 返回并从映射中删除与指定键相关联的项。

  • remove(key, value) - 仅当将指定键key映射为指定值value并返回布尔值时,才从映射中删除条目。

例如,

import java.util.LinkedHashMap;
class Main {
    public static void main(String[] args) {
        LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
        numbers.put("One", 1);
        numbers.put("Two", 2);
        numbers.put("Three", 3);
        System.out.println("LinkedHashMap: " + numbers);
        //具有单个参数的删除方法
        int value = numbers.remove("Two");
        System.out.println("删除值: " + value);
        //具有两个参数的删除方法
        boolean result = numbers.remove("Three", 3);
        System.out.println("条目3被删除了吗? " + result);
        System.out.println("更新后的LinkedHashMap: " + numbers);
    {}
{}

输出结果

LinkedHashMap: {One=1, Two=2, Three=3{}
Remover valor: 2
Entrada3Foi removido? True
LinkedHashMap atualizado: {One=1{}

Outros métodos do LinkedHashMap

MétodoDescrição
clear()Remova todos os itens do mapa
containsKey()Verifique se o mapa contém a chave especificada e retorne um valor booleano
containsValue()Verifique se o mapa contém o valor especificado e retorne um valor booleano
size()Retorna o tamanho do mapa
isEmpty()Verifique se o mapa está vazio e retorne um valor booleano

Diferenças entre LinkedHashMap e HashMap

LinkedHashMap e HashMap implementam a interface Map. No entanto, há algumas diferenças entre eles.

  • O LinkedHashMap mantém uma lista encadeada duplamente interna. Portanto, ele mantém a ordem de inserção de seus elementos.

  • A classe LinkedHashMap requer mais espaço de armazenamento do que o HashMap. Isso é porque o LinkedHashMap mantém uma lista encadeada interna.

  • O desempenho do LinkedHashMap é mais lento do que o HashMap.