美文网首页Java集合类源码探究
【java容器的刻意练习】【二】ArrayList底层数据结构

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

作者: 程序猿修仙传 | 来源:发表于2020-01-30 22:48 被阅读0次

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

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

  • ArrayList底层是什么数据结构?
  • ArrayList如何实现自动扩容?
  • ArrayList优缺点是什么?
  • ArrayList面试中有哪些考点?
  • ArrayList工作中用在什么场景?

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

先创建一个ArrayList。

ArrayList arrayList = new ArrayList();

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

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

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

  • elementData 是啥?
  • DEFAULTCAPACITY_EMPTY_ELEMENTDATA 是啥?

继续看

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

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

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

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

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

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

相关文章

网友评论

    本文标题:【java容器的刻意练习】【二】ArrayList底层数据结构

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