Java集合类源码解读
详细介绍Java 1.7下集合类的完整实现和里面涉及到的一些设计模式。
lcli
这个作者很懒,什么都没留下…
展开
-
JDK源码阅读之HashSet
HashSet 实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证Set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null 元素。HashSet 为基本操作提供了稳定性能,这些基本操作包括 add、remove、contains 和size,假定哈希函数将这些元素正确地分布在桶中。对此 set 进行迭代所需的时间与HashSet 实例的大小(元原创 2014-03-28 14:25:48 · 2390 阅读 · 0 评论 -
JDK源码阅读之HashMap的实现
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间原创 2014-03-27 20:35:01 · 2299 阅读 · 0 评论 -
JDK源码阅读之AbstractSet和AbstractQueue
AbstractSet 提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作,此类并没有重写 AbstractCollection 类中的任何实现。它仅仅添加了 equals 和 hashCode 的实现。AbstractQueue提供某些 Queue 操作的骨干实现。此类中的实现适用于基本实现不 允许包含 null 元素时。//继承了AbstractCollecti原创 2014-03-27 19:52:25 · 1553 阅读 · 1 评论 -
JDK源码阅读之AbstractMap
AbstractMap 提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作。//实现了接口Mappublic abstract class AbstractMap implements Map { protected AbstractMap() {//提供一个空的构造函数 } public int size() {//返回元素个数原创 2014-03-27 19:30:42 · 1658 阅读 · 0 评论 -
JDK源码阅读之ArrayList
ArrayList源码解析,分析其内部实现机制相关。原创 2014-02-26 15:19:42 · 2005 阅读 · 0 评论 -
JDK源码阅读之LinkedList
JDK的LinkedList源码分析,学习其实现,才能扬长避短的使用好JDK原创 2014-02-26 17:13:43 · 1953 阅读 · 0 评论 -
JDK容器类里的迭代器模式学习
迭代器模式又叫游标模式,是提供一种方法用来访问容器内的元素,而不用暴露容器内部的实现。这样有2个明显的好处:1 容器内部的结构发生变化时,如果迭代器本身不发生变化,则外面使用迭代器的业务代码不用修改。2 如果我们需要提供多于一种的迭代方式,则只需增加迭代器,不用修改容器类。这2点也正好满足设计模式所要求的单一职责条例。我们这里重点分析下JDK容器类(ArrayList和原创 2014-03-19 20:07:20 · 1973 阅读 · 0 评论 -
JDK源码阅读之Arrays
Arrays是一个工具类,提供了排序,搜索等的操作方法,Arrays提供的方法都是静态方法,Arrays的构造函数是私有的,也就是不能被实例化,同时,我们可以从名称可以看到Arrays操作的数据都是以数组的形式进行的,Collection里面的排序和搜索都是将Collection转换为Array之后进行,看看神秘的JDK的排序和搜索是怎么实现的?原创 2014-03-26 14:50:09 · 1721 阅读 · 0 评论 -
JDK源码阅读之String
String是平常使用最多的结构之一,String提供来很多方便的接口来处理字符串,同时其支持正则表达式,所以字符串处理能力很强,下面我们简单介绍下String的内部实现,重点关注下常用的一些方法实现,String的一些方法涉及到字符编码,这里不介绍字符编码相关的。原创 2014-03-26 15:42:35 · 1626 阅读 · 0 评论 -
JDK源码阅读之Collection分析
Collection接口是所有集合类的父接口,其提供了一些通用的方法,但未提供任何具体的实现,提供此类是为了能统一的以接口的方式使用一些方法,下面我们看看其提供了哪些方法。//继承了迭代器的接口,即所有的集合类都是可以使用foreach这种使用方法public interface Collection extends Iterable { int size();//返回元素个数原创 2014-03-26 16:21:47 · 1514 阅读 · 0 评论 -
JDK源码阅读之AbstractCollection抽象类
此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作,下面我们看看其实现,看看如何通过迭代器实现集合的一些操作。//Collection的骨干实现public abstract class AbstractCollection implements Collection { protected AbstractCollection() {//每个原创 2014-03-26 16:46:29 · 1252 阅读 · 0 评论 -
JDK源码阅读之List和AbstractSequentialList
List是有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。AbstractSequentialList提供了 List 接口的骨干实现,从而最大限度地减少了实现受“连续访问”数据存储(如链接列表)支持的此接口所需的工作。//List接口,继承于Collec原创 2014-03-26 17:43:52 · 1344 阅读 · 0 评论 -
JDK源码阅读之AbstractList
此类提供 List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。对于连续的访问数据(如链表),应优先使用AbstractSequentialList,而不是此类。与其他抽象 collection 实现不同,编程人员不必 提供迭代器实现;迭代器和列表迭代器由此类在以下“随机访问”方法上实现:get(int)、set(int, E)、add(int,原创 2014-03-27 13:14:02 · 1635 阅读 · 0 评论 -
JDK源码阅读之Map接口和Set接口
Map是将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值,只允许包含一个null键值。Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。//Map接口,K为键值,V为值对象pu原创 2014-03-27 13:35:14 · 1647 阅读 · 0 评论 -
JDI源码阅读之SortedMap和SortedSet
SortedMap提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的Comparator 进行排序。SortedSet提供关于元素的总体排序 的 Set。这些元素使用其自然顺序进行排序,或者根据通常在创建有序 set 时提供的Comparator 进行排序。//接口SortedMap,继承了Map接口public int原创 2014-03-27 13:51:03 · 1428 阅读 · 0 评论 -
JDK源码阅读之Queue接口和Deque接口
Queue 除了基本的 Collection 操作外,还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值(null 或false,具体取决于操作)。插入操作的后一种形式是用于专门为有容量限制的 Queue 实现设计的。Deque支持在两端插入和移除元素。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容量原创 2014-03-27 17:45:58 · 1503 阅读 · 0 评论