📜  Java.util.LinkedHashMap类(1)

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

Java.util.LinkedHashMap类

Java中的LinkedHashMap是一种散列表(哈希表)与链表的混合数据结构,它继承自HashMap,并且具有保证迭代顺序的特性。具体来说,它可以按照元素的添加顺序、最近最少使用(LRU)的策略来对元素进行排序和访问。LinkedHashMap在Java中被广泛使用,可以用于实现LRU缓存、LRU替换算法等。

1. LinkedHashMap类的构造方法

LinkedHashMap共提供了4个构造方法,分别为:

  • LinkedHashMap(): 构造一个空的LinkedHashMap。
  • LinkedHashMap(int initialCapacity): 构造一个指定初始化容量的LinkedHashMap。
  • LinkedHashMap(int initialCapacity, float loadFactor): 构造一个指定初始化容量和负载因子的LinkedHashMap。
  • LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder): 构造一个指定初始化容量、负载因子和排序模式的LinkedHashMap。其中排序模式为true表示按访问顺序排序,为false表示按添加顺序排序。
2. LinkedHashMap类的常用方法
2.1 存取方法

LinkedHashMap的存取方法继承自HashMap,包括put()get()remove()等。

2.2 排序方法

LinkedHashMap具有排序的特性,因此提供了一些排序方法。

2.2.1 按访问顺序排序

  • get(Object key): 获取指定键对应的值,在访问时会更新元素的访问顺序。
  • getOrDefault(Object key, V defaultValue): 获取指定键对应的值,如果键不存在,则返回默认值。
  • put(K key, V value): 向Map中添加键值对,如果键已存在,则更新值并更新访问顺序。
  • putAll(Map<? extends K, ? extends V> m): 向Map中添加所有键值对,如果键已存在,则更新值并更新访问顺序。
  • remove(Object key): 删除指定键对应的键值对,并返回其值。

2.2.2 按添加顺序排序

LinkedHashMap的缺省排序方式即为按添加顺序排序,在这种情况下,LinkedHashMap提供的排序方法和HashMap相同。

2.3 其他方法
  • clear(): 清空Map中的所有元素。
  • containsKey(Object key): 判断Map中是否存在指定的键。
  • containsValue(Object value): 判断Map中是否存在指定的值。
  • isEmpty(): 判断Map是否为空。
  • keySet(): 返回Map中所有键构成的Set。
  • size(): 返回Map中元素的数量。
  • toString(): 将Map转化成字符串形式。
  • values(): 返回Map中所有值构成的Collection。
3. LinkedHashSet与LinkedHashMap的区别

LinkedHashSet与LinkedHashMap都是基于哈希表和链表实现的数据结构,它们之间最大的区别在于双向链表的构造。

LinkedHashSet是使用HashSet实现并通过哈希表实现,而LinkedHashMap使用HashMap实现并通过HashMap内部维护的双向链表结构实现。

4. 总结

通过本文的介绍,我们了解了LinkedHashMap类的构造方法和常用方法,还介绍了LinkedHashSet和LinkedHashMap的区别。LinkedHashMap实现了HashMap的全部功能,并添加了基于访问顺序/添加顺序排序的特性。在一些要求元素按访问顺序/添加顺序排序的应用场景中,LinkedHashMap是非常有用的数据结构。