Java集合框架源码解析
文章平均质量分 92
集成了Java常用的集合框架的源码解析,以及部分源代码实现,参考JDK1.8进行代码解析
Lframe
这个作者很懒,什么都没留下…
展开
-
HashSet源码解析(基于JDK1.8)
HashSet是Java中经常被用到的集合,弄清它的底层实现,有利于我们更好地使用它,又是这句话….. 不过HashSet相对于其他集合框架简单了不少。老规矩,还是先看看它的UML图:①:实现了Serializable接口,表明它支持序列化。 ②:实现了Cloneable接口,表明它支持克隆,可以调用超类的clone()方法进行浅拷贝。 ③继承了AbstractSet抽象类...原创 2018-06-04 12:57:48 · 4460 阅读 · 3 评论 -
ArrayList初始化容量的问题
(所有的图片的代码来源于JDK1.8中的源码) 可能很多同学听到网上其他人说ArrayList的底层数组elementData的初始化容量是10。其实并不是!,下图是我们经常初始化ArrayList使用的构造器: 而DEFAULTCAPACITY_EMPTY_ELEMENTDATA也是一个空的数组,请看下面的图示: 说白了就是,每次我们调用初始化一个空白的集合ArrayL...原创 2018-05-30 19:35:53 · 16402 阅读 · 6 评论 -
HashMap源码解析(基于JDK1.8)
散列是一种用于以常数平均时间执行插入、删除和查找的技术。HashMap是基于哈希表的Map接口实现,该实现提供了所有可选的映射操作,并允许使用 空值和空键。(HashMap 类大致等同于Hashtable,除了它是不同步的并且允许为空值。)这个类不能保证Map的顺序; 特别是,它不能保证顺序会随着时间的推移保持不变。下面就开始我们的源码分析吧:老规矩,先贴一张UML图:①:...原创 2018-06-02 10:36:36 · 1443 阅读 · 2 评论 -
ArrayList源码解析(基于JDK1.8)
ArrrayList是Java中经常被用到的集合,弄清楚它的底层实现,有利于我们更好地使用它。下图是ArrayList的继承关系图: 从图中我们可以看出:1: 实现了RandomAccess接口:表面ArrayList支持快速(通常是常量时间)的随机访问。官方源码也给出了解释:(因为底层实现是一个数组,所以get()方法要比迭代器快,后面还会更有更加详细的源码解析) ...原创 2018-05-23 17:20:53 · 1045 阅读 · 2 评论 -
LinkedList源码解析(基于JDK1.8)
LinkedList将做为双链表来实现,它本身实现了List接口和Deque接口,并且实现了所有可选的列表操作,并且允许包含所有元素(包括null)。下图是LinkedList的UML图:从图中我们可以看出:继承了AbstractSequentialList抽象类:在遍历LinkedList的时候,官方更推荐使用顺序访问,也就是使用我们的迭代器。(因为LinkedList...原创 2018-05-27 18:41:48 · 8392 阅读 · 7 评论