Java 集合源码解析系列-- 基于JDK12

Java 集合源码剖析系列02: Collection架构

2019-04-28  本文已影响0人  Mr_Ares

1. 概要 :

首先,我们来看下 Collection的一些框架类的关系如下图:

image.png

> 从图中我们可以看到,Collection 是一个接口,主要分支有list 和set接口,list 和set 接口有他们各自的实现类。通过接口进行抽象,接口允许我们操作集合时不必关注具体实现,从而达到“多态”。

为了方便我们抽象出了AbstractCollection抽象类,它实现了Collection中的绝大部分函数;这样,在Collection的实现类中,我们就可以通过继承AbstractCollection省去重复编码。AbstractList和 AbstractSet都继承于AbstractCollection,具体的List实现类继承于AbstractList,而Set的实现类则继承于AbstractSet。

而Collection中有一个iterator()函数,它的作用是返回一个Iterator接口。通常,我们通过Iterator迭代器来遍历集合。ListIterator是List接口所特有的,在List接口中,通过ListIterator()返回一个ListIterator对象。

接下来,我们分别对 Collection, Listset, AbstractCollection, AbstractList, AbstractSet, iterator, ListIterator 逐个介绍:

2. Collection简介 :

Collection 接口定义如下:

public interface Collection<E> extends Iterable<E> {}

Collection 作为集合的根接口,是高度抽象出来的集合,它定义了一组对象和它的子类需要实现的基本操作:比如 添加、删除、清空、遍历(读取)、是否为空、获取大小等等。

定义了的方法如下:


image.png
3. List 接口简介 :

List接口定义如下:

public interface List<E> extends Collection<E> {}

List 是一个元素有序的、可以重复、可以为 null 的集合
List 接口是继承于Collection接口,它自然就包含了Collection中的全部函数,除此之外新增的方法如下:

// 相比与Collection,List新增的API:

4. Set 接口简介 :

Set 接口定义如下:

public interface Set<E> extends Collection<E> {}

4. AbstractCollection 简介 :

AbstractCollection的定义如下:

public abstract class AbstractCollection<E> implements Collection<E> {}
------抽象类可以不用实现接口的全部方法

5. AbstractList 简介 :

AbstractList 的定义如下:

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}

6. AbstractSet简介 :

AbstractSet的定义如下:

public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}

7. Iterator

Iterator的定义如下:

public interface Iterator<E> {}

8 . ListIterator

ListIterator的定义如下:

public interface ListIterator<E> extends Iterator<E> {}

ListIterator是一个继承于Iterator的接口,它是队列迭代器。专门用于便利List,能提供向前/向后遍历。相比于Iterator,它新增了添加、是否存在上一个元素、获取上一个元素等等API接口。

主要api 函数如下:


image.png

.
.
.
.

---下面我将继续对 集合源码剖析,有兴趣可以继续关注

-- -如果文章帮到了您,或者您感兴趣,请帮忙点赞!

上一篇下一篇

猜你喜欢

热点阅读