ArrayList重点APi
Java 中的 ArrayList
是 List
接口的动态数组实现,提供了丰富的 API 用于操作元素。以下是其常用 API 的分类说明:
1. 构造方法
ArrayList()
:创建一个初始容量为 10 的空列表。ArrayList(int initialCapacity)
:创建指定初始容量的空列表。ArrayList(Collection<? extends E> c)
:通过集合c
中的元素创建列表(元素顺序与集合迭代器返回顺序一致)。
2. 基本增删改查
添加元素
boolean add(E e)
:在列表末尾添加元素e
,返回true
(始终成功)。void add(int index, E element)
:在指定索引index
处插入元素element
,后续元素右移。boolean addAll(Collection<? extends E> c)
:将集合c
中的所有元素添加到列表末尾,返回是否修改了列表。boolean addAll(int index, Collection<? extends E> c)
:从指定索引index
开始插入集合c
中的元素。
删除元素
E remove(int index)
:删除指定索引index
处的元素,返回被删除的元素,后续元素左移。boolean remove(Object o)
:删除列表中第一个与o
相等的元素(使用equals()
判断),返回是否删除成功。boolean removeAll(Collection<?> c)
:删除列表中所有包含在集合c
中的元素(差集),返回是否修改了列表。boolean retainAll(Collection<?> c)
:保留列表中所有包含在集合c
中的元素(交集),返回是否修改了列表。void clear()
:清空列表中所有元素。
修改元素
E set(int index, E element)
:替换指定索引index
处的元素为element
,返回被替换的旧元素。
查询元素
E get(int index)
:返回指定索引index
处的元素。int indexOf(Object o)
:返回元素o
在列表中首次出现的索引;若不存在,返回-1
。int lastIndexOf(Object o)
:返回元素o
在列表中最后出现的索引;若不存在,返回-1
。boolean contains(Object o)
:判断列表是否包含元素o
(使用equals()
判断)。
3. 容量与大小
int size()
:返回列表中元素的个数。boolean isEmpty()
:判断列表是否为空(size() == 0
时返回true
)。void ensureCapacity(int minCapacity)
:手动扩容,确保列表容量至少为minCapacity
。void trimToSize()
:将列表容量调整为当前元素个数(减少内存占用)。
4. 遍历与转换
遍历相关
Iterator<E> iterator()
:返回列表的迭代器(支持遍历元素)。ListIterator<E> listIterator()
:返回列表迭代器(支持双向遍历和修改)。ListIterator<E> listIterator(int index)
:从指定索引index
开始的列表迭代器。
转换为数组
Object[] toArray()
:将列表元素转换为Object
数组。<T> T[] toArray(T[] a)
:将列表元素转换为指定类型T
的数组(若a
容量足够则复用,否则创建新数组)。
5. 子列表操作
List<E> subList(int fromIndex, int toIndex)
:返回从fromIndex
(包含)到toIndex
(不包含)的子列表视图。- 注意:子列表是原列表的视图,修改子列表会影响原列表,反之亦然。
import java.util.ArrayList;
import java.util.List;public class ArrayListExample {public static void main(String[] args) {// 创建 ArrayListList<String> list = new ArrayList<>();// 添加元素list.add("Apple");list.add("Banana");list.add(1, "Orange"); // 在索引1处插入// 获取元素System.out.println(list.get(0)); // Apple// 修改元素list.set(2, "Grape");// 遍历元素for (String fruit : list) {System.out.println(fruit);}// 查找元素索引System.out.println(list.indexOf("Banana")); // 2// 删除元素list.remove(1); // 删除索引1处的元素// 子列表List<String> subList = list.subList(0, 1);System.out.println(subList); // [Apple]// 清空列表list.clear();System.out.println(list.isEmpty()); // true}
}
注意事项
ArrayList
允许null
元素和重复元素。- 线程不安全,多线程环境下需使用
Collections.synchronizedList(new ArrayList<>())
或CopyOnWriteArrayList
。 - 动态扩容机制:当元素数量超过当前容量时,容量自动扩容为原来的 1.5 倍(通过
Arrays.copyOf()
实现)。