一、前言

HashMap存在着一个问题,那就是它的迭代顺序不是它的存储顺序,即HashMap中的元素是无序的。但是有些场景下,我们需要使用一个有序的map。这种情况下,我们就可以使用LinkedHashMap,它虽然增加了时间可空间上的开销,但是通过维护一个运行于所有条目的双向链表,LinkedHashMap保证了元素的迭代顺序。

二、属性

2.1 Entry

可以看出在LinkedHashMap中增加了before和after用于维护双向链表。

/*** HashMap.Node subclass for normal LinkedHashMap entries.*/static class Entry<K,V> extends HashMap.Node<K,V> {Entry<K,V> before, after;Entry(int hash, K key, V value, Node<K,V> next) {super(hash, key, value, next);}}

参考

jdk LinkedHashMap源码分析相关推荐

  1. Java类集框架 —— LinkedHashMap源码分析

    前言 我们知道HashMap底层是采用数组+单向线性链表/红黑树来实现的,HashMap在扩容或者链表与红黑树转换过程时可能会改变元素的位置和顺序.如果需要保存元素存入或访问的先后顺序,那就需要采用L ...

  2. 常用jdk类库源码分析以及各个包

    常用jdk类库源码分析以及各个包 1.java.lang包 java.lang包 是Java中最常用的包,程序不需要注入,就可以使用该包中的类,利用包中的类可以设计最基本的Java程序. 2.java ...

  3. java观察者模式类图_设计模式(十八)——观察者模式(JDK Observable源码分析)...

    1 天气预报项目需求,具体要求以下: 1) 气象站能够将天天测量到的温度,湿度,气压等等以公告的形式发布出去(好比发布到本身的网站或第三方).java 2) 须要设计开放型 API,便于其余第三方也能 ...

  4. 散列表、LinkedHashMap源码分析

    一.散列表 1.散列思想 散列表用的是数组支持按照下标随机访问数据的时候,时间复杂度是O(1)O(1)O(1)的特性.通过散列函数把元素的键值映射为下标,然后把数据存储在数组中对应下标的位置.当按照键 ...

  5. Java设计模式——工厂模式讲解以及在JDK中源码分析

    需求:便于手机种类的扩展 手机的种类很多(比如HuaWeiPhone.XiaoMiPhone等) 手机的制作有prepare,production, assemble, box 完成手机店订购功能. ...

  6. Java集合之LinkedHashMap源码分析

    概述 HashMap是无序的, 即put的顺序与遍历顺序不保证一样. LinkedHashMap是HashMap的一个子类, 它通过重写父类的相关方法, 实现自己的功能. 它保留插入的顺序. 如果需要 ...

  7. LinkedHashMap源码分析

    简介 LinkedHashMap继承HashMap(线程不安全-),内部主体还是一个哈希表,底层用的仍然是拉链式散列结构,由数组+链表/红黑树组成(加入红黑树分析起来可能会有一点乱,本文淡化红黑树分析 ...

  8. 【Java源码分析】LinkedHashMap源码分析

    类的定义 public class LinkedHashMap<K, V> extends HashMap<K, V> {} 基于双向链表实现,属于Map的一类,其父类是Has ...

  9. HashSet及LinkedHashSet源码分析(基于JDK1.6)

    Java容器类的用途是"保存对象",分为两类:Map--存储"键值对"组成的对象:Collection--存储独立元素.Collection又可以分为List和 ...

  10. LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

最新文章

  1. java中JUnit单元测试的使用方法
  2. linux7开启ntp服务,【NTP】CentOS7.2配置NTP服务
  3. 2场直播丨PostgreSQL、openGauss
  4. 实战课堂:数据库高Library Cache Lock导致Hang的故障分析
  5. 南开大学计算机考研2019分数线,2019年南开大学考研复试分数线已公布
  6. 2018网易校招前端笔试考后总结
  7. Linux查看目录busy,linux umount 提示"device is busy" 终极解决
  8. docker 仓库镜像 替换_Docker如何制作自己镜像并上传dockerhub
  9. Hive总结及常见语法
  10. 【oracle数据库实验相关步骤和语句】
  11. 一丶Java 中和的区别;二丶java中和,||和|的区别。
  12. ssrender例子
  13. 代码简短且隐蔽的后门木马
  14. Java IDE - Selenium 包下载
  15. java 获取叶子节点个数_数据结构编程: 统计二叉树中叶子结点的个数。
  16. python最佳编程语言_前十大编程语言你会几种?
  17. mongoDb中_id和ObjectId详细说明
  18. 磁带库和磁带机的区别
  19. 在服务器后台运行程序
  20. 去掉clover的广告方法

热门文章

  1. 数据结构---堆的相关操作
  2. Linux系统中安装Nginx
  3. JavaEE学习13--Jquery
  4. Spring StringUtils#cleanPath method 浅析
  5. 大龄程序员失业后,看他们是如何破局突围的?
  6. 突发 , 谷歌官宣安卓改名了!
  7. java船_Java-货船
  8. 点钞机语音怎么打开_这才是华为手机语音助手正确打开方式,远比你想象的要强大很多!...
  9. matlab排课方案,求助matlab大神,学校的课程安排太骚了,我们压根就不用学matlab...
  10. python字符串的基本操作_python-字符串基本操作