一、ArrayList概述

  数组集合,无容量限制,非线程安全

  ArrayList、Vector是线性表,使用Object数组作为容器去存储数据的,添加了很多方法维护这个数组,使其容量可以动态增长,极大地提升了开发效率。它们明显的区别是ArrayList是非同步的,Vector是同步的。不用考虑多线程时应使用ArrayList来提升效率。

  ArrayList的基层是数组,实现了通过index直接访问数据

最佳使用推荐

  数据连续写入,需要根据index进行查找;写入和删除较少的,必须使用有参数的构造,即使超过了也会自动扩展。

1.1、JDK8 的ArrayList实现

1)重要的成员变量

  private static final int DEFAULT_CAPACITY = 10;

    默认初始化容量

  transient Object[] elementData; 

    存储arraylist元素的数组缓冲区。arraylist的容量是这个数组缓冲区的长度。任何带有elementdata==defaultcapacity_empty_elementdata的空arraylist将在添加第一个元素时扩展为默认容量

  private static final Object[] EMPTY_ELEMENTDATA = {};

    用于空实例的共享空数组实例。

  private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

    共享空数组实例,用于默认大小的空实例。我们将其与空元素数据区分开来,以了解何时充气添加第一个元素。

2)构造方法

构造一、空参数构造,构造初始容量为10的空列表。

//构造初始容量为10的空列表。
public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

 

  创建一个空的共享数组实例,没有初始化的默认的10,默认的是在第一add时候创建的

构造二、初始容量构造。按照给点参数构造

    //构造具有指定初始容量的空列表。
    public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }
View Code

相关文章:

  • 2021-10-10
  • 2020-03-17
  • 2022-12-23
  • 2022-03-05
  • 2022-01-04
  • 2021-04-23
猜你喜欢
  • 2021-04-11
  • 2021-07-14
  • 2022-12-23
  • 2021-11-29
  • 2021-11-29
  • 2021-06-12
相关资源
相似解决方案