Java集合类源码探究

【java容器的刻意练习】【二】ArrayList底层数据结构

2020-01-30  本文已影响0人  程序猿修仙传

今天开始学习ArrayList源码(以后所有源码都在jdk1.13上分析)。学习源码肯定要带着问题来学的,要不漫无目的就不是学习,是浪费时间。

一般我们都有以下几个问题:

今天我们先解决第一个问题:ArrayList底层是什么数据结构?

先创建一个ArrayList。

ArrayList arrayList = new ArrayList();

进去看ArrayList()这个构造函数,如下:

    public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

这时候我们应该想到2个问题:

继续看

    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = new Object[0];
    transient Object[] elementData;

原来 elementData 是个数组对象!(用transient关键字标记的成员变量不参与序列化过程)
而 DEFAULTCAPACITY_EMPTY_ELEMENTDATA 就是创建一个空洞数组!

那么,我们知道了,这个ArrayList构造函数只是创建一个空数组!

再看看另外的构造函数,只是创建传进来大小的数组,或者复制传进来的集合,就这么简单。

ArrayList传长度参数的构造函数 ArrayList传集合参数的构造函数

所以,到现在我们知道了,ArrayList底层数据结构实际就是一个数组!

上一篇 下一篇

猜你喜欢

热点阅读