原文: https://javatutorial.net/java-linkedhashmap-example

LinkedHashMap是哈希表和链表的组合,以可预测的迭代顺序实现Map接口。HashMapLinkedHashMap之间的区别在于LinkedHashMap维护着一个双向链表,该列表允许来回扫描所有条目。 顺序保持不变,这意味着将键插入映射的顺序。 如果将重新插入到映射中,则顺序不会受到影响。LinkedHashMap提供所有可选的Map操作,还允许空元素。 就时间复杂度而言,就像HashMap一样,它为诸如addcontainsremove之类的基本操作提供了恒定时间的性能。LinkedHashMap有两个影响其性能的参数,它们是初始容量和负载系数。 此类中的迭代不受容量的影响,因此在为初始容量选择过高的值方面,它比HashMap效率更高。

Java `LinkedHashMap`示例 - 图1

为什么LinkedHashMap有用

  1. 它将按照输入到映射中的顺序遍历所有条目。
  2. 就像在HashMap中一样,允许使用空值。
  3. 使用双向链接的链表,使扫描效率更高。
  4. 它对添加或访问项目的顺序有额外的了解。

继承图

Java `LinkedHashMap`示例 - 图2

继承图

LinkedHashMap中的构造方法摘要

  1. LinkedHashMap():构造一个空的插入顺序的 LinkedHashMap,其默认初始容量(16)和默认负载因子(0.75)。
  2. LinkedHashMap(int initialCapacity):构造一个空的插入顺序的LinkedHashMap,并将容量设置为指定的 initialCapacity 参数和默认负载因子(0.75)。
  3. LinkedHashMap(int initialCapacity, float loadFactor):使用指定的容量和负载因子构造一个空的插入顺序的LinkedHashMap
  4. LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder):使用指定的初始容量,负载系数和排序方式构造一个空的LinkedHashMap实例。
  5. LinkedHashMap(Map <? extends K, ? extends V> m):构造一个插入顺序的LinkedHashMap实例,该实例具有与指定映射相同的映射。

LinkedHashMap类中的方法

  1. void clear():从此映射中删除所有映射。
  2. boolean containsValue(Object value):如果LinkedHashMap包含指定的值,则返回true,否则返回false
  3. Set<Map.Entry<K,V>> entrySet():返回当前映射中包含的映射的设置视图。
  4. V get(Object key):返回指定键所映射到的值;如果该映射不包含该键的映射,则返回null
  5. V getOrDefault(Object key, V defaultValue):返回指定键所映射到的值;如果该映射不包含该键的映射,则返回defaultValue
  6. Set<K> keySet:返回此映射中包含的键的设置视图。
  7. protected boolean removeEldestEntry(Map. Entry<K, V> eldest):返回此映射中包含的值的集合视图。
  8. void put(K key, V value):将指定的Value与指定的Key相关联。 (它是从 Java 中的Map类继承的)

有关EnumSet主要方法的更多信息,请随时访问原始 Oracle 文档

获取LinkedHashMap的大小,检查其在特定键中是否包含某个值,并检查其是否为空,最后从LinkedHashMap中删除键:

  1. import java.util.*;
  2. public class LinkedHashMapExample
  3. {
  4. public static void main(String args[])
  5. {
  6. LinkedHashMap<String, String> student =
  7. new LinkedHashMap<String, String>();
  8. student.put("name", "Joe");
  9. student.put("major", "Computer Science");
  10. student.put("marital status", "Single");
  11. System.out.println(student);
  12. // printing the value of the key called name
  13. System.out.println("Key 'name's value: " + student.get("name"));
  14. // getting the size of the linkedHashMap (size() is inherited from Map)
  15. System.out.println("Size of the LinkedHashMap: " + student.size());
  16. // checking whether the map is empty or not
  17. System.out.println("Is the map empty: " + student.isEmpty());
  18. // checking whether the linkedHashMap contains the key specified as an argument
  19. System.out.println("Does it contain 'marital status'? "+ student.containsKey("marital status"));
  20. // deleting/removing an element from the linkedHashMap works by using the
  21. //remove method
  22. System.out.println("Deleting element 'name': " + student.remove("name"));
  23. }
  24. }

输出

  1. {name=Joe, major=Computer Science, marital status = Single}
  2. Key 'name's value: Joe
  3. Size of the LinkedHashMap: 3
  4. Is the map empty: false
  5. Does it contain 'marital status'? true
  6. Deleting element 'name': "Joe"

使用clear()清除LinkedHashMap

  1. import java.util.*;
  2. public class LinkedHashMapExample {
  3. public static void main(String[] args)
  4. {
  5. LinkedHashMap<String, String> student =
  6. new LinkedHashMap<String, String>();
  7. li_hash_map.put("name", "Joe");
  8. li_hash_map.put("major", "Computer Science");
  9. li_hash_map.put("marital status", "Single");
  10. System.out.println("Current stage of linkedHashMap: " + student);
  11. // Clearing the linked hash map using clear()
  12. li_hash_map.clear();
  13. System.out.println("Stage after the clear() method: " + student);
  14. }
  15. }

输出

  1. Current stage of linkedHashMap: {"name"="Joe", "major"="Computer Science", "marital status ="Single"}
  2. Stage after the clear() method: {}