📌 目录
- 什么是 ArrayList?
- ArrayList 的特性
- 创建和初始化 ArrayList
- ArrayList 常用方法
- 4.1 添加元素
- 4.2 访问元素
- 4.3 修改元素
- 4.4 删除元素
- 4.5 检查元素
- 4.6 清空集合
- ArrayList 性能
- ArrayList 和 LinkedList 的比较
- 总结
- 参考资料
- 出站链接
1. 什么是 ArrayList?
ArrayList
是 Java 集合框架中的一个实现类,属于 List
接口的实现。它是基于动态数组来实现的,可以存储重复元素,并且元素是有序的。ArrayList
提供了对元素的快速访问和修改。
与数组不同,ArrayList
可以动态扩展,当元素超出初始容量时,ArrayList
会自动增长其大小。
2. ArrayList 的特性
- 可变大小:
ArrayList
会根据元素数量动态扩展其容量,初始容量为 10。 - 允许重复元素:与数组不同,
ArrayList
可以存储重复元素。 - 有序:
ArrayList
保持元素的插入顺序,访问时按照插入顺序返回。 - 随机访问:由于底层是数组实现,可以通过索引访问元素,时间复杂度为 O(1)。
- 线程不安全:
ArrayList
不是线程安全的,如果在多线程环境中使用,需手动同步。
3. 创建和初始化 ArrayList
创建空的 ArrayList
import java.util.ArrayList;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
System.out.println("ArrayList created: " + list);
}
}
创建并初始化 ArrayList
import java.util.ArrayList;
import java.util.Arrays;
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>(Arrays.asList("Java", "Python", "C++"));
System.out.println("ArrayList initialized: " + list);
}
}
4. ArrayList 常用方法
4.1 添加元素
add(E e)
:将指定元素添加到ArrayList
的末尾。add(int index, E element)
:将指定元素插入到指定位置。
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add(1, "C++"); // 在索引 1 位置插入元素
4.2 访问元素
get(int index)
:返回指定位置的元素。set(int index, E element)
:将指定位置的元素替换为新的元素。
String language = list.get(1); // 获取索引为 1 的元素
list.set(1, "JavaScript"); // 将索引为 1 的元素替换为 "JavaScript"
4.3 修改元素
set(int index, E element)
:替换指定位置的元素。
list.set(0, "Go"); // 将索引为 0 的元素修改为 "Go"
4.4 删除元素
remove(int index)
:删除指定位置的元素。remove(Object o)
:删除指定的元素。
list.remove(1); // 删除索引为 1 的元素
list.remove("JavaScript"); // 删除元素 "JavaScript"
4.5 检查元素
contains(Object o)
:判断集合中是否包含指定元素。size()
:返回集合中元素的个数。isEmpty()
:判断集合是否为空。
boolean contains = list.contains("Go"); // 判断是否包含 "Go"
int size = list.size(); // 获取集合的大小
boolean isEmpty = list.isEmpty(); // 判断集合是否为空
4.6 清空集合
clear()
:删除集合中的所有元素。
list.clear(); // 清空集合
5. ArrayList 性能
- 访问元素:通过索引访问元素的时间复杂度为 O(1)。
- 添加元素:添加元素到末尾的时间复杂度为 O(1),但如果容量不足,需要扩展数组,扩展时的时间复杂度为 O(n)。
- 删除元素:删除某个位置的元素的时间复杂度为 O(n),因为删除后所有后续元素需要移动。
- 插入元素:在指定位置插入元素的时间复杂度为 O(n),因为插入后,元素需要移动。
6. ArrayList 和 LinkedList 的比较
特性 | ArrayList | LinkedList |
---|---|---|
底层实现 | 动态数组 | 双向链表 |
访问时间 | O(1) | O(n) |
插入/删除性能 | O(n)(特别是中间插入/删除) | O(1)(在列表头/尾插入/删除) |
内存使用 | 较少(单一数组) | 较多(每个元素需要额外的指针) |
ArrayList
在随机访问时表现更好,适用于对元素进行频繁读取的情况。LinkedList
在插入和删除元素时性能更好,适用于对元素进行频繁插入/删除的情况。
7. 总结
ArrayList
是一个常用的 Java 集合类,适用于对元素的频繁访问和修改。它提供了动态的数组功能,并且支持灵活的元素添加、删除和查找操作。ArrayList
的缺点是删除和插入操作的性能较差,尤其是在中间位置进行操作时。
8. 参考资料
- Java Collections Framework Documentation
- GeeksforGeeks – ArrayList in Java
- Baeldung – Guide to Java ArrayList
发表回复