Java ArrayList
介绍
ArrayList
是 Java 中最常用的集合类之一,它实现了 List
接口,基于动态数组的数据结构。与普通数组不同,ArrayList
的大小可以动态调整,因此非常适合存储和操作可变长度的数据集合。
ArrayList
的主要特点包括:
- 动态大小:可以根据需要自动扩展或缩小容量。
- 随机访问:支持通过索引快速访问元素。
- 泛型支持:可以存储任意类型的对象(通过泛型指定)。
- 非线程安全:在多线程环境下需要额外同步。
创建 ArrayList
要使用 ArrayList
,首先需要导入 java.util.ArrayList
包。以下是创建一个 ArrayList
的示例:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 创建一个存储字符串的 ArrayList
ArrayList<String> fruits = new ArrayList<>();
// 添加元素
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// 输出 ArrayList
System.out.println(fruits);
}
}
输出:
[Apple, Banana, Orange]
ArrayList
的泛型类型(如 <String>
)用于指定集合中存储的数据类型。如果不指定类型,ArrayList
可以存储任意类型的对象,但通常不建议这样做,以避免类型转换错误。
常用操作
添加元素
使用 add()
方法可以向 ArrayList
中添加元素:
fruits.add("Mango"); // 在末尾添加元素
fruits.add(1, "Grapes"); // 在指定索引位置插入元素
访问元素
通过 get()
方法可以根据索引访问元素:
String firstFruit = fruits.get(0); // 获取第一个元素
System.out.println(firstFruit); // 输出: Apple
修改元素
使用 set()
方法可以修改指定索引位置的元素:
fruits.set(2, "Pineapple"); // 将索引为 2 的元素修改为 Pineapple
System.out.println(fruits); // 输出: [Apple, Grapes, Pineapple, Mango]
删除元素
通过 remove()
方法可以删除指定索引或指定值的元素:
fruits.remove(1); // 删除索引为 1 的元素
fruits.remove("Mango"); // 删除值为 Mango 的元素
System.out.println(fruits); // 输出: [Apple, Pineapple]
获取大小
使用 size()
方法可以获取 ArrayList
中元素的数量:
int size = fruits.size();
System.out.println("Size: " + size); // 输出: Size: 2
检查是否包含元素
通过 contains()
方法可以检查 ArrayList
是否包含某个元素:
boolean hasApple = fruits.contains("Apple");
System.out.println("Contains Apple? " + hasApple); // 输出: Contains Apple? true
实际应用场景
场景 1:存储用户输入
假设我们需要存储用户输入的一组数字并计算它们的总和:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
System.out.println("Enter numbers (type 'done' to finish):");
while (true) {
String input = scanner.next();
if (input.equals("done")) {
break;
}
numbers.add(Integer.parseInt(input));
}
int sum = 0;
for (int number : numbers) {
sum += number;
}
System.out.println("Sum: " + sum);
}
}
输入:
5
10
15
done
输出:
Sum: 30
场景 2:过滤数据
假设我们有一个存储学生姓名的 ArrayList
,需要过滤出名字长度大于 5 的学生:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<String> students = new ArrayList<>();
students.add("Alice");
students.add("Bob");
students.add("Charlie");
students.add("David");
ArrayList<String> filteredStudents = new ArrayList<>();
for (String student : students) {
if (student.length() > 5) {
filteredStudents.add(student);
}
}
System.out.println("Filtered Students: " + filteredStudents);
}
}
输出:
Filtered Students: [Charlie]
总结
ArrayList
是 Java 中非常强大且灵活的数据结构,适用于需要动态调整大小的场景。通过本文,你已经学习了如何创建 ArrayList
、进行常见操作(如添加、访问、修改和删除元素),以及如何在实际项目中应用 ArrayList
。
ArrayList
虽然功能强大,但在处理大量数据时,频繁的插入和删除操作可能会导致性能问题。在这种情况下,可以考虑使用 LinkedList
或其他更适合的数据结构。
附加资源与练习
练习 1
创建一个 ArrayList
,存储一组整数,并编写代码找出其中的最大值和最小值。
练习 2
编写一个程序,使用 ArrayList
存储一组字符串,并按字母顺序对它们进行排序。
参考资源
- Java ArrayList 官方文档
- 《Java 编程思想》—— Bruce Eckel
继续练习并探索 ArrayList
的更多功能,你将能够更熟练地使用它来解决实际问题!