Java集合—List—继承关系
![](https://img.haomeiwen.com/i3154067/bedfd899573da9e8.jpg)
前言
集合类库Collection中最常用的大概就是ArrayList了,List a = new ArrayList();也是很常见了~那么ArrayList和List究竟是什么关系?为什么要用如:List a = new ArrayList(); 这种方式创建新的ArrayList对象呢?这是几乎每个Java新人都会遇到的问题。本文不去讨论ArrayList的常见用法,而是重点看一下ArrayList的继承关系,它继承了哪些类?实现了什么接口?
首先,来看一下ArrayList:
List是一个接口,ArrayList是实现了List接口的实现类。那让我们来看一下源码中ArrayList的定义吧!(Java8)
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable{...}
可以看见ArrayList继承了AbstractList,实现了List、RandomAccess、Cloneable、Serializabl接口。所以现在,第一个问题就解决了:List是个接口,ArrayList实现了这个接口,这就是他们的关系,第二个问题先不讨论,留到以后。让我们先看一下ArrayList继承的抽象类AbstractList,和实现的其他几个接口吧!
AbstractList是一个抽象类,定义如下:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {...}
可见AbstractList继承自AbstractCollection,并实现了List接口。好,现在清楚多了,让我们看看AbstractCollection是个什么东西?看名字就很直观,是Collection的抽象类,点进去源码里看看是不是?
public abstract class AbstractCollection<E> implements Collection<E> {
很明显,AbstractCollection果然是个抽象类,实现了Collection接口。现在所有的关系都分析出来了,但是不直观,一图胜千言,让我们看图说话:
![](https://img.haomeiwen.com/i3154067/bf99e008382a93f0.jpg)
1.ArrayList继承了抽象类AbstractList,同时实现了List、RandomAccess、Cloneable、Serializable接口。
2.抽象类AbstractList继承自抽象类AbstractCollection同时实现了List接口。
3.抽象类AbstractCollection实现了Collection接口
4.List接口继承自Collection接口
5.Collection接口继承自Iterable接口
ArrayList说完,再看一下LinkedList:
这次,就直接看图说话了:
![](https://img.haomeiwen.com/i3154067/2616758afd1197ff.jpg)
1.LinkedList继承自抽象类:AbstractSequentialList,同时实现了List、Cloneable、Serializable、Deque接口。
2.抽象类AbstractSequentialList继承自抽象类AbstractList
3.抽象类AbstractList继承自抽象类AbstractCollection同时实现了List接口。
4.抽象类AbstractCollection实现了Collection接口
5.Deque接口继承自Queue接口,Queue接口继承自Collection接口
6.Collection接口继承自Iterable接口
对比ArrayList发现:
1.LinkedList并没有实现RandomAccess接口,因为一个类实现了RandomAccess接口则表示支持快速随机存取(时间复杂度为O(1)),而LinkedList底层是链表,要访问某个数只能通过依次遍历的方式(时间复杂度O(n)),所以LinkedList是没有实现RandomAccess接口的。
2.LinkedList实现了Deque接口,Deque继承自Queue,是 Double ended queue (双端队列) 的缩写,表明LinkedList可以实现双端队列所支持的如头部尾部插入删除访问元素等功能。