LinkedHashMap集合概述和特点
时间: 2023-06-18 19:06:55 浏览: 52
LinkedHashMap是Java集合框架中的一种Map实现,它继承自 HashMap 类,底层使用双向链表维护元素的顺序。特点是能够保持插入顺序,即遍历顺序与插入顺序相同,同时也支持按照访问顺序排序,即根据元素最近被访问的时间排序。其键值对是唯一的,键和值都可以为null。 对于访问顺序,可以通过构造函数或调用 afterNodeAccess、beforeNodeInsertion 等访问方法来配置。此外,LinkedHashMap 还实现了 removeEldestEntry 方法,它的作用是当元素个数超过指定阈值时,删除最不常访问的元素。
相关问题
LinkedHashMap集合的底层原理和特点
LinkedHashMap 是基于哈希表和双向链表实现的 Map 接口的实现类。它继承自 HashMap,因此也是基于哈希表实现的。不同之处在于,LinkedHashMap 在 HashMap 的基础上使用了双向链表,用于维护插入元素的顺序。因此,LinkedHashMap 中的元素是有序的,而且可以按照插入顺序或访问顺序进行遍历。
当使用 accessOrder 参数为 true 创建 LinkedHashMap 对象时,LinkedHashMap 会按照访问顺序维护双向链表。每次访问一个元素时,该元素会被移动到链表末尾。这样可以实现 LRU 缓存淘汰算法。此外,LinkedHashMap 中的哈希表部分与 HashMap 是一样的,使用了拉链法解决哈希冲突,具有较快的查找和插入速度。
LinkedHashMap集合 API
LinkedHashMap类实现了Map接口,使用双向链表维护插入顺序。具有如下主要方法:
1. void clear():从此映射中删除所有映射关系。
2. boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回true。
3. boolean containsValue(Object value):如果此映射将一个或多个键映射到指定值,则返回true。
4. Set<Entry<K,V>> entrySet():返回此映射中所包含的映射关系的Set视图。
5. V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回null。
6. boolean isEmpty():如果此映射未包含键-值映射关系,则返回true。
7. Set<K> keySet():返回此映射中包含的键的Set视图。
8. V put(K key, V value):将指定的值与此映射中的指定键关联。
9. void putAll(Map<? extends K,? extends V> m):将指定映射中的所有映射关系复制到此映射中。
10. V remove(Object key):从此映射中移除指定键的映射关系(如果存在)。
11. int size():返回此映射中的键-值映射关系数。
12. Collection<V> values():返回此映射中包含的值的Collection视图。
注意:LinkedHashMap是非线程安全的。