深入了解 Java 各种容器(三)
      
        
          
          2025-09-15 03:07:06
        
        
              
                
                
                
                  
                    # Technical
                  
                
                
                
                  
                    # JavaBase
                  
                
                
              
          
              
          
      
      此篇了解 LinkedHashSet 与 LinkedHashMap
继承了 HashMap 的 LinkedHashMap 拥有 HashMap 所有的特点,除此之外,LinkedHashMap 还通过双向链表保证了元素的有序
LinkedHashMap 源码只有 700 来行,主要通过重写 HashMap 的方法来增加功能

基础属性与方法
首先从构造方法开始,LinkedHashMap 对外提供 5 中构造方法
1  | // 无参构造  | 
LinkedHashMap 中多了一个属性 accessOrder 排序模式,如果为 true 表示按访问顺序,false 表示按插入顺序
另外还有两个关键的属性
1  | // 链表头元素  | 
双向链表的静态内部类节点
1  | static class Entry<K,V> extends HashMap.Node<K,V> {  | 
重写方法
LinkedHashMap 对 HashMap 重写的方法是其核心
1  | void reinitialize() {  | 
有序性
可以通过 LinkedHashMap 的 accessOrder 属性控制其内部元素的顺序
1  | public class LinkedHashMapExample {  | 
LRU 缓存
利用 LinkedHashMap 的访问顺序特性,可以轻松实现一个 LRU(Least Recently Used,最近最少使用)缓存。只需要在构造 LinkedHashMap 时设置 accessOrder 为 true,并覆盖 removeEldestEntry 方法,使其在缓存大小超过指定容量时自动删除最久未访问的条目
1  | public class LRUCache<K, V> extends LinkedHashMap<K, V> {  | 
LinkedHashSet
和 HashSet 一样,LinkedHashSet 也是对 LinkedHashMap 的封装,本质依然是 LinkedHashMap