Java LinkedHashMap类
Java中的LinkedHashMap
它是Java Collections Framework的一部分。
LinkedHashMap是Map接口的哈希表和链接列表实现。
LinkedHashMap扩展了HashMap类。
LinkedHashMap保持插入顺序。
因此,在迭代其键时,将按插入顺序返回元素。LinkedHashMap使用双向链接列表来维护插入顺序。
如果重新插入密钥,则其插入顺序不会受到影响。
当您想要一个地图时,我们可以按插入顺序遍历条目,但又不想处理与TreeMap相关的另外开销时,这很有用。
LinkedHashMap允许键和值的空条目。
可以有一个null键和多个null值。LinkedHashMap不是线程安全的。
如果要在多线程环境中使用它,则可以使用Collections.synchronizedMap()方法在其上创建一个同步包装器。
LinkedHashMap构造函数
LinkedHashMap类中有5个构造函数。
LinkedHashMap构造函数
LinkedHashMap():使用默认的初始容量(16)和负载因子(0.75)创建一个空的LinkedHashMap实例。
LinkedHashMap(int initialCapacity):使用给定的初始容量和负载因子(0.75)创建一个空的LinkedHashMap实例。
如果initialCapacity为负,则抛出IllegalArgumentException
。LinkedHashMap(int initialCapacity,float loadFactor):使用给定的初始容量和负载因子创建一个空的LinkedHashMap实例。
如果初始容量为负或者负载系数为正,则抛出IllegalArgumentException。LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder):使用给定的初始容量,负载因子和订购方式创建一个空的LinkedHashMap。
如果accessOrder为true –排序模式为access-order,否则为insert-order。LinkedHashMap(Map <?扩展K,?扩展V> m):创建插入顺序的LinkedHashMap实例,该实例具有与指定映射相同的映射。
如果给定的映射为null,则抛出NullPointerException。
这是一个简单的示例,用于确认LinkedHashMap维护其键的插入顺序。
package com.theitroad.examples; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; public class LinkedHashMapExamples { public static void main(String[] args) { Map<Integer, String> vowelsMap = new HashMap<>(); vowelsMap.put(1, "a"); vowelsMap.put(2, "e"); vowelsMap.put(5, "u"); vowelsMap.put(4, "o"); vowelsMap.put(3, "i"); vowelsMap.forEach((k, v) -> System.out.println("[" + k + "," + v + "]")); LinkedHashMap<Integer, String> lhm = new LinkedHashMap<>(); lhm.put(1, "A"); lhm.put(2, "E"); lhm.put(5, "U"); lhm.put(4, "O"); lhm.put(3, "I"); lhm.forEach((k, v) -> System.out.println("[" + k + "," + v + "]")); } }
输出:
[1,a] [2,e] [3,i] [4,o] [5,u] [1,A] [2,E] [5,U] [4,O] [3,I]
LinkedHashMap方法
LinkedHashMap类没有专用方法。
它通过扩展使用HashMap类中的方法。
但是,对于条目的插入顺序,某些方法被覆盖。
containsValue(Object value):利用LinkedList方法获得更快的分辨率。
get(对象键),getOrDefault(对象键,V defaultValue)
明确()
keySet():返回LinkedKeySet的实例。
forEach(),replaceAll():利用链表实现方法进行插入顺序迭代和更快的处理。
LinkedHashMap和HashMap
LinkedHashMap扩展了HashMap类。
因此,HashMap是LinkedHashMap类的超类。LinkedHashMap保持插入顺序,而HashMap则不保持条目的任何顺序。
在LinkedHashMap条目上进行迭代始终会产生相同的元素序列。
遍历HashMap条目可能会产生随机序列,因为不维护顺序。LinkedHashMap的性能比维护HashMap的性能稍低,这归因于维护链表的开销增加,但有一个例外:对LinkedHashMap的集合视图进行迭代需要的时间与地图的大小成正比,而不论其容量如何。
在HashMap上进行迭代可能会更昂贵,需要的时间与其容量成正比。
LinkedHashMap与TreeMap
如果要按插入顺序访问Map元素,建议使用LinkedHashMap。
它具有快速的性能,并且不会增加与TreeMap相关的成本。