现在我们已经学习了数组,接下来让我们介绍 ArrayList。ArrayList 是 Java 集合框架的一部分,它提供了一种更灵活的方式来处理对象列表。与数组不同,ArrayList 可以动态地增长或缩小。
-
打开项目目录中的 ArrayListDemo.java
文件。
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
// 我们将在这里添加代码
}
}
注意顶部的 import
语句。这告诉 Java 我们希望在程序中使用 ArrayList 类。
-
现在,让我们创建一个存储字符串的 ArrayList。在 main
方法中添加以下代码:
ArrayList<String> fruits = new ArrayList<>();
这创建了一个可以存储 String 对象的空 ArrayList。<String>
部分称为“泛型”,它指定了 ArrayList 将包含的元素类型。
-
让我们向 ArrayList 中添加一些元素。添加以下代码:
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
add()
方法将元素追加到列表的末尾。
-
现在,打印我们的 ArrayList。添加以下代码:
System.out.println("列表中的水果:");
for (String fruit : fruits) {
System.out.println(fruit);
}
这段代码使用增强型 for 循环遍历 ArrayList,类似于我们之前对数组的操作。
提示:你可以随时编译并运行程序以查看输出。或者,你可以继续添加更多代码,最后一次性运行。
-
ArrayList 有许多有用的方法。让我们尝试几个。添加以下代码:
System.out.println("\n水果的数量: " + fruits.size());
System.out.println("第二个水果是: " + fruits.get(1));
size()
返回 ArrayList 中元素的数量,get(index)
获取指定索引处的元素。
-
我们还可以使用 set()
方法替换 ArrayList 中的元素。添加以下代码:
// 替换前: [Apple, Banana, Cherry]
fruits.set(1, "Blueberry"); // 将 "Banana" 替换为 "Blueberry"
System.out.println("\n替换第二个水果后:");
System.out.println(fruits); // [Apple, Blueberry, Cherry]
set(index, element)
将指定索引处的元素替换为新元素。ArrayList 的大小保持不变。
-
与数组不同,ArrayList 允许我们使用 add(index, element)
方法在任何位置插入元素。这与我们之前看到的 set()
不同。让我们看看 add()
的工作原理:
// 插入前: [Apple, Blueberry, Cherry]
fruits.add(1, "Blackberry");
System.out.println("\n在索引 1 处插入 Blackberry 后:");
System.out.println(fruits);
// 插入后: [Apple, Blackberry, Blueberry, Cherry]
让我们理解发生了什么:
add(1, "Blackberry")
在索引 1 处插入 "Blackberry"
- 索引 1 及之后的现有元素(Blueberry, Cherry)会自动向右移动一个位置
- ArrayList 的大小增加 1
- 这与
set()
不同,后者会替换现有元素而不移动或改变大小
为了帮助理解区别:
// 使用 add(index, element) - 插入并移动元素
fruits.add(1, "Blackberry"); // [Apple, Blackberry, Blueberry, Cherry]
// 使用 set(index, element) - 替换而不移动元素
fruits.set(1, "Blackberry"); // [Apple, Blackberry, Cherry]
-
我们还可以从 ArrayList 中移除元素。添加以下代码:
fruits.remove("Cherry");
System.out.println("\n移除 Cherry 后:");
System.out.println(fruits);
这会移除 ArrayList 中第一次出现的 "Cherry"。当一个元素被移除时,后续元素会向左移动以填补空缺。
-
最后,让我们检查 ArrayList 中是否包含某些元素:
System.out.println("\n列表中是否包含 Apple? " + fruits.contains("Apple"));
System.out.println("列表中是否包含 Cherry? " + fruits.contains("Cherry"));
contains()
方法检查 ArrayList 是否包含特定元素,并返回一个布尔值。
-
保存文件,然后编译并运行程序:
javac ~/project/ArrayListDemo.java
java -cp ~/project ArrayListDemo
你应该会看到类似以下的输出:
列表中的水果:
Apple
Banana
Cherry
水果的数量: 3
第二个水果是: Banana
替换第二个水果后:
[Apple, Blueberry, Cherry]
在索引 1 处插入 Blackberry 后:
[Apple, Blackberry, Blueberry, Cherry]
移除 Cherry 后:
[Apple, Blackberry, Blueberry]
列表中是否包含 Apple? true
列表中是否包含 Cherry? false