跳到主要内容

Java ArrayList

介绍

ArrayList 是 Java 中最常用的集合类之一,它实现了 List 接口,基于动态数组的数据结构。与普通数组不同,ArrayList 的大小可以动态调整,因此非常适合存储和操作可变长度的数据集合。

ArrayList 的主要特点包括:

  • 动态大小:可以根据需要自动扩展或缩小容量。
  • 随机访问:支持通过索引快速访问元素。
  • 泛型支持:可以存储任意类型的对象(通过泛型指定)。
  • 非线程安全:在多线程环境下需要额外同步。

创建 ArrayList

要使用 ArrayList,首先需要导入 java.util.ArrayList 包。以下是创建一个 ArrayList 的示例:

java
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 中添加元素:

java
fruits.add("Mango"); // 在末尾添加元素
fruits.add(1, "Grapes"); // 在指定索引位置插入元素

访问元素

通过 get() 方法可以根据索引访问元素:

java
String firstFruit = fruits.get(0); // 获取第一个元素
System.out.println(firstFruit); // 输出: Apple

修改元素

使用 set() 方法可以修改指定索引位置的元素:

java
fruits.set(2, "Pineapple"); // 将索引为 2 的元素修改为 Pineapple
System.out.println(fruits); // 输出: [Apple, Grapes, Pineapple, Mango]

删除元素

通过 remove() 方法可以删除指定索引或指定值的元素:

java
fruits.remove(1); // 删除索引为 1 的元素
fruits.remove("Mango"); // 删除值为 Mango 的元素
System.out.println(fruits); // 输出: [Apple, Pineapple]

获取大小

使用 size() 方法可以获取 ArrayList 中元素的数量:

java
int size = fruits.size();
System.out.println("Size: " + size); // 输出: Size: 2

检查是否包含元素

通过 contains() 方法可以检查 ArrayList 是否包含某个元素:

java
boolean hasApple = fruits.contains("Apple");
System.out.println("Contains Apple? " + hasApple); // 输出: Contains Apple? true

实际应用场景

场景 1:存储用户输入

假设我们需要存储用户输入的一组数字并计算它们的总和:

java
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 的学生:

java
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 存储一组字符串,并按字母顺序对它们进行排序。

参考资源

继续练习并探索 ArrayList 的更多功能,你将能够更熟练地使用它来解决实际问题!