📅  最后修改于: 2023-12-03 15:16:02.899000             🧑  作者: Mango
Java中的LinkedHashMap是一种散列表(哈希表)与链表的混合数据结构,它继承自HashMap,并且具有保证迭代顺序的特性。具体来说,它可以按照元素的添加顺序、最近最少使用(LRU)的策略来对元素进行排序和访问。LinkedHashMap在Java中被广泛使用,可以用于实现LRU缓存、LRU替换算法等。
LinkedHashMap共提供了4个构造方法,分别为:
LinkedHashMap()
: 构造一个空的LinkedHashMap。LinkedHashMap(int initialCapacity)
: 构造一个指定初始化容量的LinkedHashMap。LinkedHashMap(int initialCapacity, float loadFactor)
: 构造一个指定初始化容量和负载因子的LinkedHashMap。LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
: 构造一个指定初始化容量、负载因子和排序模式的LinkedHashMap。其中排序模式为true
表示按访问顺序排序,为false
表示按添加顺序排序。LinkedHashMap的存取方法继承自HashMap,包括put()
、get()
、remove()
等。
LinkedHashMap具有排序的特性,因此提供了一些排序方法。
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)
: 删除指定键对应的键值对,并返回其值。LinkedHashMap的缺省排序方式即为按添加顺序排序,在这种情况下,LinkedHashMap提供的排序方法和HashMap相同。
clear()
: 清空Map中的所有元素。containsKey(Object key)
: 判断Map中是否存在指定的键。containsValue(Object value)
: 判断Map中是否存在指定的值。isEmpty()
: 判断Map是否为空。keySet()
: 返回Map中所有键构成的Set。size()
: 返回Map中元素的数量。toString()
: 将Map转化成字符串形式。values()
: 返回Map中所有值构成的Collection。LinkedHashSet与LinkedHashMap都是基于哈希表和链表实现的数据结构,它们之间最大的区别在于双向链表的构造。
LinkedHashSet是使用HashSet实现并通过哈希表实现,而LinkedHashMap使用HashMap实现并通过HashMap内部维护的双向链表结构实现。
通过本文的介绍,我们了解了LinkedHashMap类的构造方法和常用方法,还介绍了LinkedHashSet和LinkedHashMap的区别。LinkedHashMap实现了HashMap的全部功能,并添加了基于访问顺序/添加顺序排序的特性。在一些要求元素按访问顺序/添加顺序排序的应用场景中,LinkedHashMap是非常有用的数据结构。