数据结构 - ArrayList

    科技2022-08-06  96

    文章目录

    前言准备工作ArrayList源码分析构造器添加元素查找元素删除元素


    前言

    本文基于JDK1.8版本的ArrayList,展开源码级别的分析。


    准备工作

    Class内部的api:

    获取数组的内部组件类型。如果不是数组类型,返回null。

    Array内部的api:

    创建一个给定类型与长度的数组。

    Arrays内部的api:

    复制数组并将其转换为给定类型。


    ArrayList源码分析

    构造器

    先来看下它的构造器。

    使用长度为0的Object数组作为存储数据的结构。

    elementData:transient Object[]类型,用于存储数据。DEFAULTCAPACITY_EMPTY_ELEMENTDATA:{}。

    使用长度为给定值的Object数组作为存储数据的结构。

    使用长度为集合长度、类型为集合指定类型的数组作为存储数据的结构。


    添加元素

    然后看下添加元素的方法。

    DEFAULT_CAPACITY :10。

    正常情况下,容量扩容为原来的1.5倍。

    MAX_ARRAY_SIZE:2147483639。MAX_VALUE:2147483647。

    容量<=2147483639,或者为2147483647。

    再来看另一种添加元素的方法。


    查找元素

    检查索引的有效性。

    获取给定索引的元素。


    删除元素

    删除指定索引的元素。

    删除列表中第一个元素的值为给定值的元素。

    Processed: 0.012, SQL: 8