首先LinkedHashMap继承于HashMap,所以LinkedHashMap也是HashMap的子类。
- hashmap的数据结构是数组+单向链表+红黑树,而linkedhashmap的数据结构是数组+双向链表。
- HashMap的迭代顺序是随机的,LinkedHashMap的迭代顺序是插入顺序
- 两者查询/插入平均时间复杂度均为 O(1),但 LinkedHashMap 因维护链表,实际性能略低
- 哈希冲突严重时,HashMap 可能退化为 O(n),LinkedHashMap 因链表遍历开销更大
扩展:LinkedHashMap 可通过 accessOrder 参数 切换模式:
默认 false:按插入顺序迭代。
设为 true:按访问顺序排序(最近访问的排在链表尾部),适合实现 LRU 缓存淘汰策略
1 | LinkedHashMap<String, String> lruCache = new LinkedHashMap<>(16, 0.75f, true); |
高级用法:自动删除最旧条目
LinkedHashMap 可以通过重写 removeEldestEntry() 方法实现自动删除最旧的条目(常用于固定大小的缓存):
1 | Map<String, Integer> cache = new LinkedHashMap<>(16, 0.75f, true) { |