LinkedHashMap的accessOrder的作用
LinkedHashMap的构造方法有一个是这样子的:
1 public LinkedHashMap(int initialCapacity, 2 float loadFactor, 3 boolean accessOrder) { 4 super(initialCapacity, loadFactor); 5 this.accessOrder = accessOrder; 6 }
参数说明:
- initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16
- loadFactor 加载因子,使用无参构造方法时,此值默认是 0.75f
- accessOrder false: 基于插入顺序 true: 基于访问顺序
重点看看accessOrder的作用,使用无参构造方法时,此值默认是false。
那么设置成true的时候会是什么样子的呢?
1 public static void main(String[] args) { 2 Map<String, String> map = new LinkedHashMap<String, String>(16,0.75f,true); 3 map.put("1", "a"); 4 map.put("2", "b"); 5 map.put("3", "c"); 6 map.put("4", "e"); 7 8 for (Iterator<String> iterator = map.values().iterator(); iterator 9 .hasNext();) { 10 String name = (String) iterator.next(); 11 System.out.print(name); 12 } 13 }
上面的代码打印结果为:abce,很正常,按照加入的顺序打印
现在增加两行代码:
1 public static void main(String[] args) { 2 Map<String, String> map = new LinkedHashMap<String, String>(16,0.75f,true); 3 map.put("1", "a"); 4 map.put("2", "b"); 5 map.put("3", "c"); 6 map.put("4", "e"); 7 8 //new add 9 map.get("1"); 10 map.get("2"); 11 12 for (Iterator<String> iterator = map.values().iterator(); iterator 13 .hasNext();) { 14 String name = (String) iterator.next(); 15 System.out.print(name); 16 } 17 }
打印结果为:ceab
这就是基于访问的顺序,get一个元素后,这个元素被加到最后(使用了LRU 最近最少被使用的调度算法)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI
· 精选4款基于.NET开源、功能强大的通讯调试工具
· 数据不出内网:基于Ollama+OneAPI构建企业专属DeepSeek智能中台
· 大模型工具KTransformer的安装