美文网首页Java从入门到实践
Java集合—List—继承关系

Java集合—List—继承关系

作者: Sunflow007 | 来源:发表于2020-03-08 10:52 被阅读0次
2.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接口。现在所有的关系都分析出来了,但是不直观,一图胜千言,让我们看图说话:

image

1.ArrayList继承了抽象类AbstractList,同时实现了List、RandomAccess、Cloneable、Serializable接口。

2.抽象类AbstractList继承自抽象类AbstractCollection同时实现了List接口。

3.抽象类AbstractCollection实现了Collection接口

4.List接口继承自Collection接口

5.Collection接口继承自Iterable接口


ArrayList说完,再看一下LinkedList:

这次,就直接看图说话了:

image

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可以实现双端队列所支持的如头部尾部插入删除访问元素等功能。

相关文章

  • Java集合—List—继承关系

    前言 集合类库Collection中最常用的大概就是ArrayList了,List a = new ArrayLi...

  • Java基础(五)

    Java集合 接口继承关系和实现 集合类存放于 Java.util 包中,主要有 3 种:set(集)、list...

  • java集合

    java集合 集合之间的关系 Collection├List│├LinkedList│├ArrayList│└Ve...

  • 2020-07-03【List与Set的区别】

    Java中的Set集合是继承Collection的接口,是一个不包含重复元素的集合。 List List以特定顺序...

  • Java集合

    一、接口继承关系和实现 集合类存放于Java.util包中,主要有3种:set(集)、list(列表包含Queue...

  • Java 面试基础知识(三)

    1.Java集合类型 这里特别要注意的,Map没有继承Collection!! list和set继承于collec...

  • 2018-11-26 java 面试(集合)

    Java中的几种集合的区别及适用场景 首先大的集合分为:List,Set,Map三种,其中List与Set是继承自...

  • 「 深入浅出 」集合Set

    系列文章 「 深入浅出 」集合List 「 深入浅出 」java集合Collection和Map Set继承自Co...

  • Java中的集合

    一、概述 Java中的集合有三大类,分别为List,Set,Map。 List和Set都继承Collection,...

  • Java集合

    Java集合 类库关系图 List ArrayList:Object数组 CopyOnArrayListCopyO...

网友评论

    本文标题:Java集合—List—继承关系

    本文链接:https://www.haomeiwen.com/subject/zihqdhtx.html