JDK集合框架结构分析(一)

集合框架结构分析 一

首先源码分析之前,得先了解一下 有关 泛型、泛型擦除、内部类、嵌套类 等知识

首先看一下ArrayList类的继承、实现结构
(JDK1.7)
集合类最高的层次的接口
Collection 接口

Collection接口 继承自 Iterable接口,Iterable提供所有集合类的的遍历方案。它只定义了一个返回Iterator 接口类型的方法定义。 可用于 增强ForEach 语法糖的都是Iterable类型的.

Iterator 接口介绍:

Iterator 接口只提供三个方法。

Collection 接口提供一个默认实现: AbstractCollection 抽象类

这个类提供了Collection类中定义的方法的一些实现 ,同时 重写了toString() 方法,为集合类提供了便于观感的toString字符串。
有趣的是在AbstractCollection类中定义了一个MAX_ARRAY_SIZE 静态常量:

这个常量定义的是Integer类型的最大值减去8 原因在注释中已经说的很明白了,因为一些 jvm 分配一些对象头在数组

方法示例介绍:AbstractCollection 中的toArray方法示例:


这个方法的实现中 包含了反射,native方法等知识

接下来介绍 List接口

List接口继承于Collection接口 同时添加了一些新的方法: get()、set()等

List 接口也有一个 AbstractList 抽象类 其中也实现了 List 接口定义的一些方法

AbstractList 同时继承AbstractCollect和实现List 接口。

这里需要注意一点 AbstractList 从 AbstractCollection 继承的方法 和 AbstractList 从 List 实现的方法 重合了,这是可以的!!!

AbsrtactList 提供了部分的的方法的实现 其中最主要的是 提供了iterator和listIterator,subList方法的实现,同时提供了一个modCount变量(这个变量非常重要)

  • iterator 是以一种 内部类形式实现 Itr实现Iterator接口
  • listIterator 是一种内部类实现 继承 Itr 实现 ListIterator

ListIterator 继承Iterator 接口

它相当于是一个 双向的迭代器 还额外提供了一个set方法

方法示例介绍:
AbstractList 中的subList方法的实现:

这里涉及另外的两个类 RandomAccessSubList 和 SubList

终于到了ArrayList类的介绍了:

ArrayList类的定义:

它继承于AbstractList 同时实现List接口 (其余的RandomAccess、Cloneable、Serializable都是标记接口 其中没有定义任何的方法)

(本文只介绍集合类的结构层次,不介绍类的实现详情)

AbstractList抽象类有一个AbstractSequentialList 抽象子类(sequential表示相连的、连续的) 为什么要介绍这个类呢?LinkedList类继承自与这个类

接下来介绍Queue接口,Queue的接口层次:

Deque 接口表示双端列 它继承自 Queue ,他有个实现是 LinkedList,可以看出LinkedList也是Queue的实现之一,他可以当做一个队列使用

LinkedList类介绍:

LinkedList类的定义:

posted @ 2017-06-25 13:49  风中小蘑菇  阅读(190)  评论(0编辑  收藏  举报