科技颠覆者 发表于 2023-11-28 16:11:31

详解Java ArrayList

ArrayList简介

ArrayList是List接口的实现类,底层基于数组实现,容量可根据需要动态增加,相当于动态数组。ArrayList继承于AbstractList,并且还实现了Cloneable、Serializable、RandomAccess接口。
https://img2023.cnblogs.com/blog/1669883/202310/1669883-20231031151330115-35422590.png

[*]List:表明是列表数据结构,可以通过下标对元素进行添加删除或查找。
[*]Serializable:表示可以进行序列化和反序列化操作,可以把对象与字节流相互转换。
[*]RandomAccess:有这个接口标记的List表示可以支持快速随机访问,即通过元素下标可以直接得到元素内容。
[*]Cloneable:表示支持拷贝,可以通过浅拷贝或深拷贝来复制对象的副本。
常用方法

public class ArrayListTest {
    public static void main(String[] args) {
      ArrayList<Integer> arrayList = new ArrayList<>();
      arrayList.add(1); //添加元素
      arrayList.add(2);
      arrayList.add(3);
      arrayList.add(4);
      //在指定下标处插入元素
      arrayList.add(4, 5);
      //获取ArrayList大小
      System.out.println(arrayList.size()); //输出5
      //获取指定下标的元素
      System.out.println(arrayList.get(4)); //输出5
      //移除指定下标的元素
      arrayList.remove(0);
      //判断ArrayList内是否有指定元素
      System.out.println(arrayList.contains(5)); //输出true
      //修改指定下标的元素值
      arrayList.set(0, 9);
      System.out.println(arrayList.get(1)); //输出3
    }
}ArrayList核心源码分析

类属性

public class ArrayList<E> extends AbstractList<E>
      implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
        //序列号版本号
    @java.io.Serial
    private static final long serialVersionUID = 8683452581122892189L;

        //默认初始容量
    private static final int DEFAULT_CAPACITY = 10;

        //空数组,指定默认初始化容量为0时赋值给elementData,避免了重复创建空数组
    private static final Object[] EMPTY_ELEMENTDATA = {};

        //当调用无参构造方法时,赋值给elementData,主要用于在添加第一个元素前,标记该ArrayList是由无参构造器创建,便于将容量初始化为DEFAULT_CAPACITY,避免了重复创建空数组
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

    //实际存放元素的数组
    transient Object[] elementData; // non-private to simplify nested class access

    //ArrayList的元素个数
    private int size;
}构造方法

//无参构造器,最开始创建的是空数组,当添加第一个元素时初始化容量为10。public ArrayList() {        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}//指定初始化容量,为0的话则创建空数组。public ArrayList(int initialCapacity) {        if (initialCapacity > 0) {                this.elementData = new Object;        } else if (initialCapacity == 0) {                this.elementData = EMPTY_ELEMENTDATA;        } else {                throw new IllegalArgumentException("Illegal Capacity: "+                                                                                   initialCapacity);        }}//传入一个集合,将该集合中的元素存到ArrayList中。public ArrayList(Collection
页: [1]
查看完整版本: 详解Java ArrayList