Java集合框架
文章平均质量分 79
Lframe
这个作者很懒,什么都没留下…
展开
-
LinkedList源码解析(基于JDK1.8)
LinkedList将做为双链表来实现,它本身实现了List接口和Deque接口,并且实现了所有可选的列表操作,并且允许包含所有元素(包括null)。下图是LinkedList的UML图:从图中我们可以看出:继承了AbstractSequentialList抽象类:在遍历LinkedList的时候,官方更推荐使用顺序访问,也就是使用我们的迭代器。(因为LinkedList...原创 2018-05-27 18:41:48 · 8412 阅读 · 7 评论 -
HashSet源码解析(基于JDK1.8)
HashSet是Java中经常被用到的集合,弄清它的底层实现,有利于我们更好地使用它,又是这句话….. 不过HashSet相对于其他集合框架简单了不少。老规矩,还是先看看它的UML图:①:实现了Serializable接口,表明它支持序列化。 ②:实现了Cloneable接口,表明它支持克隆,可以调用超类的clone()方法进行浅拷贝。 ③继承了AbstractSet抽象类...原创 2018-06-04 12:57:48 · 4514 阅读 · 3 评论 -
ArrayList源码解析(基于JDK1.8)
ArrrayList是Java中经常被用到的集合,弄清楚它的底层实现,有利于我们更好地使用它。下图是ArrayList的继承关系图: 从图中我们可以看出:1: 实现了RandomAccess接口:表面ArrayList支持快速(通常是常量时间)的随机访问。官方源码也给出了解释:(因为底层实现是一个数组,所以get()方法要比迭代器快,后面还会更有更加详细的源码解析) ...原创 2018-05-23 17:20:53 · 1050 阅读 · 2 评论 -
栈的应用之编译器检测语法错误
编译器检查程序的语法错误,但是常常由于缺少一个符号(如遗漏一个花括号或是注释起始符)引起编译器报错。在程序中,每个左方括号、左圆括号都有与之对应的右括号。一旦只有左右括号中的一种,编译器就报错。下面我们就看看栈的在这里的应用:我们这里只考虑圆括号、花括号、方括号,暂时忽略其他符号。下面我们就给出算法设计思想: 首先我们需要给出一个空栈,然后把待检测的代码中的字符一一入栈,在入...原创 2018-05-28 15:39:30 · 1195 阅读 · 0 评论 -
栈的应用之中缀表达式到后缀表达式的转化
中缀表达式是我们的日常计算中常用的表达式,它更加符合人类的思维方式,诸如a+b。 而后缀表达式是计算机中较为常见的用于计算的表达式,诸如ab+。 相应的还有前缀表达式。这里主要介绍中缀表达式转后缀表达式时栈的应用: 首先需要我们准备一个栈和一个队列。 遍历中缀表达式的过程中,如果遇到的元素是数字,我们就把它放入队列中,如果是符号且是第一次遇到符号的情况下,我们就把该符号...原创 2018-05-28 16:31:07 · 406 阅读 · 0 评论 -
ArrayList初始化容量的问题
(所有的图片的代码来源于JDK1.8中的源码) 可能很多同学听到网上其他人说ArrayList的底层数组elementData的初始化容量是10。其实并不是!,下图是我们经常初始化ArrayList使用的构造器: 而DEFAULTCAPACITY_EMPTY_ELEMENTDATA也是一个空的数组,请看下面的图示: 说白了就是,每次我们调用初始化一个空白的集合ArrayL...原创 2018-05-30 19:35:53 · 16422 阅读 · 6 评论 -
HashMap源码解析(基于JDK1.8)
散列是一种用于以常数平均时间执行插入、删除和查找的技术。HashMap是基于哈希表的Map接口实现,该实现提供了所有可选的映射操作,并允许使用 空值和空键。(HashMap 类大致等同于Hashtable,除了它是不同步的并且允许为空值。)这个类不能保证Map的顺序; 特别是,它不能保证顺序会随着时间的推移保持不变。下面就开始我们的源码分析吧:老规矩,先贴一张UML图:①:...原创 2018-06-02 10:36:36 · 1457 阅读 · 2 评论