LinkedHashMap入门
LinkedHashMap
是HashMap
的子类,但内部还有一个双向链表
维护键值对的顺序,每个键值对既位于哈希表
中,也位于这个双向链表
中。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/pu
t操作,对一个键执行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入门相关推荐
- Java-Map从入门到性能分析3【LinkedHashMap(性能耗时对比、模拟LRU缓存)、TreeMap(排序、性能对比)】
[视频网址]:慕课网--Map从入门到性能分析 简介:Map是开发中,使用频率最高的知识点之一,Map家族也有很多成员,例如HashMap,LinkedMap等, 怎样更好地使用Map家族的这些成员, ...
- Activiti最全入门教程
工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进 ...
- Shiro安全框架【快速入门】就这一篇!
Shiro 简介 照例又去官网扒了扒介绍: Apache Shiro™ is a powerful and easy-to-use Java security framework that perfo ...
- Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)
文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activit ...
- Activiti入门文档
Activiti-相关API 本文介绍与Activiti工作流具体操作相关的API. 第一部分 几个Service相关的API 1.流程定义API--RepostoryService API acti ...
- spring boot 转xml格式报错解决方法_芋道 Spring Boot MyBatis 入门(一)之 MyBatis + XML...
摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/MyBatis/「芋道源码」欢迎转载,保留摘要,谢谢! 1. 概述 2. MyBatis + XML 2.1 引入 ...
- Android Gradle(三)Groovy快速入门指南
本文首发于微信公众号「刘望舒」 原文链接:Groovy快速入门看这篇就够了 前言 在前面我们学习了为什么现在要用Gradle?和Gradle入门前奏两篇文章,对Gradle也有了大概的了解,这篇文章我 ...
- 微服务技术方案:Spring Cloud 从入门到实战
随着互联网技术的发展与不断创新,以及用户流量的不断增大,越来越多的企业项目面临大数据.高并发等问题,随之而来的就是通过分布式模型组建架构,微服务思想就集中体现了应用价值,2020 年的你还没有掌握微服 ...
- 深入理解HashMap和LinkedHashMap的区别
文章目录 简介 LinkedHashMap详解 插入 访问 removeEldestEntry 总结 深入理解HashMap和LinkedHashMap的区别 简介 我们知道HashMap的变量顺序是 ...
最新文章
- 苏子怡:大数据思维融入建筑节能 | 提升之路系列
- 自动调整速率的Actor设计模式
- IDE之VS:利用 Visual Studio中的IDE配置python语言进行编程
- C语言BFS算法的实现(附完整源码)
- Qt学习笔记-----拖放
- java之sleep、wait、yield、join、notify乱解
- linux内核模块和功能,我可以用模块替换Linux内核功能吗?
- 计算几何--二维几何前置基础知识
- 升级 卸载 ubuntu的kernel版本
- 后 5G 时代,路在何方?
- 各种组织的marker gene
- 通信模块整理(一)JDY-31
- 瑞斯康达raisecom olt运维常用命令
- Facebook登陆SDK接入(Android)
- 一个小程序走完诉讼全程,腾讯云加速推动“智慧法院”方案落地
- iPaste:剪贴板界的一股清流
- iOS系统 查看设备序列号 获取UDID
- 计算机游戏软件使用说明书,虚贝游戏上号器怎么用 使用方法详解
- 解决NoteExpress无法在Word中插入引用文献
- 2018 WAIC |最强阵容!各界大咖齐聚,推动视觉智能全领域发展
热门文章
- 微软lync 持续服务器,Lync Server 2013 Front-End服务器服务不会启动很长时间
- 光纤光信号闪红灯_光纤猫光信号闪红灯
- dapper框架_.net core 基于Dapper 的分库分表开源框架(core-data)
- 知乎上的44条神回复,针针见血,看完整个人通透多了
- 怎么在gitLab代码拉到本地
- 计算机网络考研辅导谁的好,计算机网络考研辅导哪个好
- iis设置首页为main.html,遇到X-Frame-Options头未设置"怎么解决
- python 车牌识别简单_简单30行Python代码让你玩转YOLO目标识别检测!
- 计算机人力资源试题及答案,计算机二级word练习题一题目及答案.
- webstorm设置注释颜色_PDF中的注释怎么用?这里有方法