Java List 列表 – ArrayList

ArrayList 是集合框架中最常用的一个,它扩展AbstractList了并实现List接口,ArrayList 本质是一个可调整大小的数组

认识 ArrayList

ArrayList 在集合框架中的位置:

ArrayList 特性

  • 有序 ArrayList 中的元素保留它们的顺序,默认情况下是它们被添加到列表中的顺序。
  • 基于索引 可以使用索引位置随机访问元素,索引从’0’开始。
  • 动态调整大小 ArrayList当需要添加比当前大小更多的元素时动态增长。
  • 非同步 ArrayList默认情况下不同步(非线程安全)。同步场景,程序员需要synchronized关键字或干脆使用Vector类。
  • 允许重复 我们可以在数组列表中添加重复元素。这是它与 Set 的本质区别。

ArrayList 原理

ArrayList类内部是用数组实现的,从 arraylist 添加或删除的元素实际上是在内部数组中进行的。所有ArrayList方法都访问此内部数组并set/get同一数组中的元素。

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, 
                   Cloneable, java.io.Serializable{
    transient Object[] elementData;     //数组
    private int size;                   //数组大小
}

ArrayList 与数组

数组是固定大小的数据结构,必须在初始化期间声明大小。一旦声明了数组的大小,就不可能在不创建新数组的情况下调整数组大小。

Integer[] ids = new Integer[5];

ArrayList可以使用任何初始大小(默认为 16)创建一个,并且当我们添加更多项时,arraylist 的大小会动态增长,无需程序员的任何干预。

ArrayList<Integer> idList = new ArrayList<>();

因此,又把ArrayList称为动态数组。

ArrayList 创建/初始化

创建/初始化 ArrayList 至少有7中方法,可以在 一行代码初始化ArrayList 找到详细内容。

// 不指定大小,默认为16
ArrayList list = new ArrayList();
// 指定大小,大小为32
List<Integer> numbers = new ArrayList<>(32); 
标签: