Skip to content

Java LinkedHashMap

Java的LinkedHashMap类提供了哈希表和链表实现的Map接口。它继承自HashMap类,将其条目存储在哈希表中,并在所有条目之间维护一个双向链表以排序条目。

Java LinkedHashMap类继承了HashMap类


创建LinkedHashMap

要创建一个LinkedHashMap,首先需要导入java.util.LinkedHashMap包。一旦导入了该包,我们就可以使用以下方式在Java中创建linked hashmap。

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

在上面的代码中,我们创建了一个名为numbers的linked hashmap。

其中,

  • Key:用于在映射中关联每个元素(值)的唯一标识符。
  • Value:由映射中的键关联的元素。

请注意部分new LinkedHashMap<>(8, 0.6)。这里,第一个参数是capacity(容量),第二个参数是loadFactor(负载因子)

  • capacity(容量):这个linked hashmap的容量是8,意味着它可以存储8个条目。
  • loadFactor(负载因子):这个linked hashmap的负载因子是0.6。这意味着,当哈希映射被填充到60%时,条目将移到原始哈希表大小的两倍的新哈希表中。

默认容量和负载因子

我们也可以在不定义linked hashmap容量和负载因子的情况下创建linked hashmap。例如,

java
// 默认容量和负载因子的LinkedHashMap
LinkedHashMap<Key, Value> numbers1 = new LinkedHashMap<>();

默认情况下,

  • linked hashmap的容量将为16。
  • 负载因子将为0.75。

注意LinkedHashMap类还允许我们定义其条目的顺序。例如,

java
// 指定顺序的LinkedHashMap
LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);

这里,accessOrder是一个布尔值,默认值为false。在这种情况下,linked hashmap中的条目按照它们的插入顺序排序。

然而,如果传递true作为accessOrder,linked hashmap中的条目将按照最近访问的顺序排序。


从其他映射创建LinkedHashMap

以下是如何创建包含其他映射中所有元素的linked hashmap。

java
import java.util.LinkedHashMap;

class Main {
    public static void main(String[] args) {
        // 创建一个包含偶数的LinkedHashMap
        LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);
        System.out.println("LinkedHashMap1: " + evenNumbers);

        // 从另一个LinkedHashMap创建一个LinkedHashMap
        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}

LinkedHashMap的方法

LinkedHashMap类提供了一些方法,允许我们对映射执行各种操作。


向LinkedHashMap插入元素

  • put():将指定的键值映射插入到映射中。
  • putAll():将指定映射中的所有条目插入到此映射中。
  • putIfAbsent():仅在映射中不存在指定键时,将指定的键值映射插入到映射中。

例如,