一.概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,LinkedHashMap 对访问顺序也提供了相关支持.在一些场景下,该特性很有用,比如缓存.在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法.所以,在学习LinkedHashMap前,你要先了解HashMap. 1.8版本的LinkedHashMap在H…
本文的源码是基于JDK1.8版本,在学习HashMap之前,先了解数组和链表的知识. 数组:数组具有遍历快,增删慢的特点.数组在堆中是一块连续的存储空间,遍历时数组的首地址是知道的(首地址=首地址+元素字节数 * 下标),所以遍历快(数组遍历的时间复杂度为O(1) ):增删慢是因为,当在中间插入或删除元素时,会造成该元素后面所有元素地址的改变,所以增删慢(增删的时间复杂度为O(n) ). 链表:链表具有增删快,遍历慢的特点.链表中各元素的内存空间是不连续的,一个节点至少包含节点数据与后继节点的引…
不多BB,直接上代码: public class MyArrayList { //创建数组对象 private Object[] elements; //已使用数组长度 private int size = 0; //初始化数组长度 private final static int INIT_LENGTH = 10; //数组最大长度 private int static int MAX_LENGTH = Integer.MAX_VALUE; //无参构造方法 public MyArrayLis…
HashSet的UML图 HashSet的成员变量及其含义 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { static final long serialVersionUID = -5024744406713321676L; // 底层使用HashMap来保存HashSet中所有元素. private transien…
死磕Java之聊聊HashMap源码(基于JDK1.8) http://cmsblogs.com/?p=4731 为什么面试要问hashmap 的原理…
前言 本文是基于JDK1.8的ArrayList进行分析的.本文大概从以下几个方面来分析ArrayList这个数据结构 构造方法 add方法 扩容 remove方法 (一)构造方法 /** * Constructs an empty list with the specified initial capacity. * * @param initialCapacity the initial capacity of the list * @throws IllegalArgumentExcept…
目录 前言 HashMap的数据结构 深入源码 两个参数 成员变量 四个构造方法 插入数据的方法:put() 哈希函数:hash() 动态扩容:resize() 节点树化.红黑树的拆分 节点树化 红黑树拆分 总结 心得 前言 今天我们来学习Java中较为常用的集合类 HashMap. 另外说明一下,本文的 HashMap 源码是基于Jdk1.8版本的,如果没有特别说明的话,之后的集合类源码解析都是1.8的版本. HashMap的数据结构 打开HashMap源码文件,可以看到它是继承自 Abstr…
作为一种最为常用的容器,同时也是效率比较高的容器,HashMap当之无愧.所以自己这次jdk源码学习,就从HashMap开始吧,当然水平有限,有不正确的地方,欢迎指正,促进共同学习进步,就是喜欢程序员这种开源精神.(好吧,第一篇博客有点紧张) 一. HashMap结构 HashMap在jdk1.6版本采用数组+链表的存储方式,但是到1.8版本时采用了数组+链表/红黑树的方式进行存储,有效的提高了查找时间,解决冲突.这里有一篇博客写的非常好,HashMap的结构图也画的非常清楚,鼎力推荐一下杭州M…
无编程不创客,无案例不学习.疯狂创客圈,一大波高手正在交流.学习中! 疯狂创客圈 Java 死磕系列: [博客园 总入口]  QQ群:104131248 [Java 聊天室] 实战从0开始,打造100W级 仿QQ IM后台 [Spring +Netty]:   Spring Netty (整合实战,带源码) [IM协议 实战]:        Netty+Protobuf    整合一:实战案例,带源码 Netty +Protobuf   整合二:protobuf 消息通讯协议设计的几个准则 P…
HashMap在开发中经常用,面试源码方面也会经常问到,在之前也多次了解过源码,今天算是复习一下,顺便好好总结一下,包括在后面有 相关面试题.本文不会对红黑树代码由太多深入研究,特别是删除方面太复杂,面试也不会问到,知道红黑树基本实现原理就可以了 源码基于jdk1.8,我们都知道1.8版本的HashMap有很大改变,通过数组+链表+红黑树实现 图例: 关于链表和红黑树相关内容,可以参考: Java数据结构和算法(四)--链表 Java数据结构和算法(八)--红黑树与2-3树 基本结构: publ…