English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,我们将借助示例学习Java LinkedHashMap类及其操作。
Java集合框架的LinkedHashMap类提供了Map接口的哈希表和链表实现。
LinkedHashMap继承了HashMap类,以将其条目存储在哈希表中。它在内部在所有条目之间维护一个双链列表,以对条目进行排序。
为了创建双向链表,我们必须先导入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.
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{}
EsteLinkedHashMapclasseforneceno,permitindoqueefetuemosdiversasoperaçõesno mapa.
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{}
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
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{}
Método | Descriçã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 |
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.