ArrayList
是 Java 中的一个动态数组实现,它属于 Java 集合框架(Java Collections Framework)的一部分。ArrayList
内部是通过一个动态扩展的数组来存储元素的,这意味着当需要添加更多元素而当前数组容量不足时,ArrayList
会自动创建一个更大的数组,并将原有数组的元素复制到新数组中,然后再添加新元素。
主要特点
- 动态扩展:
ArrayList
的大小是动态变化的,可以随着元素的增加自动扩展容量。 - 随机访问:由于
ArrayList
内部是使用数组实现的,所以它可以快速地访问任意位置的元素(通过索引)。 - 非同步:
ArrayList
不是线程安全的,如果需要在多线程环境下使用,需要进行额外的同步处理。 - 容量与大小:
ArrayList
有两个重要的属性,capacity
(容量)和size
(大小)。容量是ArrayList
可以存储的最大元素数量,而大小是当前存储在ArrayList
中的元素数量。
构造函数
ArrayList()
:构造一个初始容量为 10 的空列表。ArrayList(Collection<? extends E> c)
:构造一个包含指定集合元素的列表,这些元素是按照该集合的迭代器返回的顺序排列的。ArrayList(int initialCapacity)
:构造一个具有指定初始容量的空列表。
常用方法
boolean add(E e)
:将指定的元素添加到此列表的末尾。void add(int index, E element)
:将指定的元素插入此列表中的指定位置(可选操作)。E remove(int index)
:移除此列表中指定位置上的元素(可选操作)。E get(int index)
:返回列表中指定位置的元素。int size()
:返回此列表中的元素数。void clear()
:移除此列表中的所有元素(可选操作)。boolean contains(Object o)
:如果此列表包含指定的元素,则返回true
。
示例
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 创建一个ArrayList实例
ArrayList<String> list = new ArrayList<>();
// 向ArrayList中添加元素
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// 访问元素
System.out.println(list.get(1)); // 输出 Banana
// 遍历ArrayList
for (String fruit : list) {
System.out.println(fruit);
}
// 移除元素
list.remove(1); // 移除索引为1的元素,即Banana
// 检查元素是否存在
if (list.contains("Banana")) {
System.out.println("Banana is in the list.");
} else {
System.out.println("Banana is not in the list.");
}
}
}
注意事项
- 在进行大量插入和删除操作时,
ArrayList
的性能可能会受到影响,因为数组的大小调整(扩容和缩容)以及元素的移动都是开销较大的操作。 - 如果需要频繁地在列表中间插入或删除元素,并且不关心元素的插入顺序,那么使用
LinkedList
可能会更合适。 - 线程安全问题:如果多个线程同时访问一个
ArrayList
实例,并且至少有一个线程从结构上修改了列表,那么它必须保持外部同步。这通常通过同步封装器方法或在调用方法时进行显式同步来实现。