📜  Java中的LinkedHashMap(1)

📅  最后修改于: 2023-12-03 15:16:29.979000             🧑  作者: Mango

Java中的LinkedHashMap

LinkedHashMap 是一个基于 哈希表链表 实现的 有序 映射表,它继承自 HashMap,因此具有 快速的查找性能,同时又能够保持插入顺序。因为内部维护了双向链表,所以在迭代访问时相比于 HashMap 会更加高效。

1. LinkedHashMap的数据结构

LinkedHashMap 的内部,它使用了一个双向链表来维护插入顺序,同时又使用了一个桶来存储所有的映射表项,桶的存储方式与 HashMap 相同,每个桶中的元素都是一个链表。在 LinkedHashMap 中,每个桶不仅仅保存了一个哈希值相同的元素,还保存了各个元素之间的顺序信息。下图是 LinkedHashMap 的简单结构图:

LinkedHashMap的简单结构图

2. LinkedHashMap类的构造方法

LinkedHashMap 类有四个构造函数:

  1. LinkedHashMap():构造一个空的 LinkedHashMap 实例,其初始容量为 16,负载因子为 0.75,默认按照插入顺序访问元素。
  2. LinkedHashMap(int initialCapacity):构造一个空的 LinkedHashMap 实例,其指定的初始容量是 initialCapacity,负载因子为 0.75,默认按照插入顺序访问元素。
  3. LinkedHashMap(int initialCapacity, float loadFactor):构造一个空的 LinkedHashMap 实例,其指定的初始容量为 initialCapacity,指定的负载因子为 loadFactor,默认按照插入顺序访问元素。
  4. LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder):构造一个空的 LinkedHashMap 实例,其指定的初始容量为 initialCapacity,指定的负载因子为 loadFactor,如果 accessOrdertrue 则表示按照访问顺序访问元素,否则表示按照插入顺序访问元素。
3. LinkedHashMap的主要方法
增加元素
  • V put(K key, V value):将指定的键值关系添加到 LinkedHashMap 中。
删除元素
  • void clear():从 LinkedHashMap 中移除所有的键值关系。
  • V remove(Object key):从 LinkedHashMap 中移除指定键的键值关系。
查找元素
  • boolean containsKey(Object key):如果包含指定键的键值关系,则返回 true。
  • boolean containsValue(Object value):如果包含指定值的键值关系,则返回 true。
  • V get(Object key):返回指定键映射到的值,如果该键不存在映射关系,则返回 null。
遍历元素
  • Set<Map.Entry<K,V>> entrySet():返回键值对的集合,可以使用 Iterator 或者 for-each 循环来遍历所有的元素。
  • Set<K> keySet():返回 LinkedHashMap 中的键集合,可以使用 Iterator 或者 for-each 循环来遍历所有的元素。
  • Collection<V> values():返回 LinkedHashMap 中的值集合,可以使用 Iterator 或者 for-each 循环来遍历所有的元素。
4. LinkedHashMap的应用场景

由于 LinkedHashMap 能够维护插入顺序,所以它常常被用在需要将数据按顺序排列的场合。借助于 LinkedHashMap,我们可以很简单地实现 LRU 缓存算法,也可以实现数据库中的聚簇索引等。

参考链接