LinkedHashMapHashMap的子类,但内部还有一个双向链表维护键值对的顺序,每个键值对既位于哈希表中,也位于这个双向链表中。LinkedHashMap支持两种顺序:一种是插入顺序;另外一种是访问顺序

插入顺序

插入顺序容易理解,先添加的在前面,后添加的在后面,修改操作不影响顺序。

举个例子

        LinkedHashMap<String, Integer> seqMap = new LinkedHashMap<>();seqMap.put("c",100);seqMap.put("d",200);seqMap.put("a",500);seqMap.put("d",300);for(Map.Entry<String,Integer> entry :seqMap.entrySet()){System.out.println(entry.getKey()+' '+entry.getValue());}

键是按照"c"、“d”、"a"的顺序插入的,修改"d"的值不会修改顺序,所以输出为

c 100
d 300
a 500

什么时候希望保持插入顺序呢?

Map经常用来处理一些数据,其处理模式是:接收一些键值对作为输入,处理,然后输出,输出时希望保持原来的顺序。比如一个配置文件,其中有一些键值对形式的配置项,但其中有一些键是重复的,希望保留最后一个值,但还是按原来的键顺序输出, LinkedHashMap就是一个合适的数据结构。

访问顺序

访问顺序是什么意思呢?所谓访问是指get/put操作,对一个键执行get/put操作后,其对应的键值对会移到链表末尾,所以,最末尾的是最近访问的,最开始的最久没被访问的,这种顺序就是访问顺序。

       LinkedHashMap<String, Integer> seqMap = new LinkedHashMap<>(16,0.75f,true);seqMap.put("c",100);seqMap.put("d",200);seqMap.put("a",500);seqMap.get("c");seqMap.put("d",300);for(Map.Entry<String,Integer> entry :seqMap.entrySet()){System.out.println(entry.getKey()+' '+entry.getValue());}
a 500
c 100
d 300

什么时候希望按访问有序呢?

一种典型的应用是LRU缓存,它是什么呢?缓存是计算机技术中一种非常有用的技术,是一个通用的提升数据访问性能的思路,一般用来保存常用的数据,容量较小,但访问更快。

缓存是相对主存而言的,主存的容量更大,但访问更慢。缓存的基本假设是:数据会被多次访问,一般访问数据时都先从缓存中找,缓存中没有再从主存中找,找到后再放入缓存,这样下次如果再找相同数据访问就快了。

缓存用于计算机技术的各个领域,比如CPU里有缓存,有一级缓存、二级缓存、三级缓存等,一级缓存非常小、非常贵、也非常快,三级缓存则大一些、便宜一些、也慢一些,
CPU缓存是相对于内存而言的,它们都比内存快。内存里也有缓存,内存的缓存一般是相对于硬盘数据而言的。硬盘也可能是缓存,缓存网络上其他机器的数据,比如浏览器访问网页时,会把一些网页缓存到本地硬盘。

LinkedHashMap可以用于缓存,比如缓存用户基本信息,键是用户Id,值是用户信息,所有用户的信息可能保存在数据库中,部分活跃用户的信息可能保存在缓存中。

一般而言,缓存容量有限,不能无限存储所有数据,如果缓存满了,当需要存储新数据时,就需要一定的策略将一些老的数据清理出去,这个策略一般称为替换算法。

LinkedHashMap入门相关推荐

  1. Java-Map从入门到性能分析3【LinkedHashMap(性能耗时对比、模拟LRU缓存)、TreeMap(排序、性能对比)】

    [视频网址]:慕课网--Map从入门到性能分析 简介:Map是开发中,使用频率最高的知识点之一,Map家族也有很多成员,例如HashMap,LinkedMap等, 怎样更好地使用Map家族的这些成员, ...

  2. Activiti最全入门教程

    工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进 ...

  3. Shiro安全框架【快速入门】就这一篇!

    Shiro 简介 照例又去官网扒了扒介绍: Apache Shiro™ is a powerful and easy-to-use Java security framework that perfo ...

  4. Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)

    文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activit ...

  5. Activiti入门文档

    Activiti-相关API 本文介绍与Activiti工作流具体操作相关的API. 第一部分 几个Service相关的API 1.流程定义API--RepostoryService API acti ...

  6. spring boot 转xml格式报错解决方法_芋道 Spring Boot MyBatis 入门(一)之 MyBatis + XML...

    摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/MyBatis/「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. MyBatis + XML 2.1 引入 ...

  7. Android Gradle(三)Groovy快速入门指南

    本文首发于微信公众号「刘望舒」 原文链接:Groovy快速入门看这篇就够了 前言 在前面我们学习了为什么现在要用Gradle?和Gradle入门前奏两篇文章,对Gradle也有了大概的了解,这篇文章我 ...

  8. 微服务技术方案:Spring Cloud 从入门到实战

    随着互联网技术的发展与不断创新,以及用户流量的不断增大,越来越多的企业项目面临大数据.高并发等问题,随之而来的就是通过分布式模型组建架构,微服务思想就集中体现了应用价值,2020 年的你还没有掌握微服 ...

  9. 深入理解HashMap和LinkedHashMap的区别

    文章目录 简介 LinkedHashMap详解 插入 访问 removeEldestEntry 总结 深入理解HashMap和LinkedHashMap的区别 简介 我们知道HashMap的变量顺序是 ...

最新文章

  1. 苏子怡:大数据思维融入建筑节能 | 提升之路系列
  2. 自动调整速率的Actor设计模式
  3. IDE之VS:利用 Visual Studio中的IDE配置python语言进行编程
  4. C语言BFS算法的实现(附完整源码)
  5. Qt学习笔记-----拖放
  6. java之sleep、wait、yield、join、notify乱解
  7. linux内核模块和功能,我可以用模块替换Linux内核功能吗?
  8. 计算几何--二维几何前置基础知识
  9. 升级 卸载 ubuntu的kernel版本
  10. 后 5G 时代,路在何方?
  11. 各种组织的marker gene
  12. 通信模块整理(一)JDY-31
  13. 瑞斯康达raisecom olt运维常用命令
  14. Facebook登陆SDK接入(Android)
  15. 一个小程序走完诉讼全程,腾讯云加速推动“智慧法院”方案落地
  16. iPaste:剪贴板界的一股清流
  17. iOS系统 查看设备序列号 获取UDID
  18. 计算机游戏软件使用说明书,虚贝游戏上号器怎么用 使用方法详解
  19. 解决NoteExpress无法在Word中插入引用文献
  20. 2018 WAIC |最强阵容!各界大咖齐聚,推动视觉智能全领域发展

热门文章

  1. 微软lync 持续服务器,Lync Server 2013 Front-End服务器服务不会启动很长时间
  2. 光纤光信号闪红灯_光纤猫光信号闪红灯
  3. dapper框架_.net core 基于Dapper 的分库分表开源框架(core-data)
  4. 知乎上的44条神回复,针针见血,看完整个人通透多了
  5. 怎么在gitLab代码拉到本地
  6. 计算机网络考研辅导谁的好,计算机网络考研辅导哪个好
  7. iis设置首页为main.html,遇到X-Frame-Options头未设置"怎么解决
  8. python 车牌识别简单_简单30行Python代码让你玩转YOLO目标识别检测!
  9. 计算机人力资源试题及答案,计算机二级word练习题一题目及答案.
  10. webstorm设置注释颜色_PDF中的注释怎么用?这里有方法