创建一个示例 ArrayList
我们创建一个 ArrayList 并填充一些数据,以便在下面的例子中使用。

import java.util.ArrayList;
import java.util.Arrays;
public class ArrayListOutputExample {
public static void main(String[] args) {
// 创建一个存储 String 类型的 ArrayList
ArrayList<String> fruits = new ArrayList<>(Arrays.asList("苹果", "香蕉", "橙子", "葡萄"));
// 创建一个存储 Integer 类型的 ArrayList
ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(10, 20, 30, 40, 50));
// 后续的例子将使用这两个 ArrayList
}
}
使用传统的 for 循环(最基础)
这是最基础、最通用的方法,适用于任何版本的 Java,通过索引遍历 ArrayList 中的每一个元素。
特点:
- 代码冗长。
- 需要手动处理索引。
- 优点**:可以在循环中方便地获取元素的索引(
i)。
代码示例:
System.out.println("--- 方法一:使用传统的 for 循环 ---");
// 输出 String 类型的 ArrayList
System.out.println("水果列表:");
for (int i = 0; i < fruits.size(); i++) {
System.out.println("索引 " + i + ": " + fruits.get(i));
}
// 输出 Integer 类型的 ArrayList
System.out.println("\n数字列表:");
for (int i = 0; i < numbers.size(); i++) {
System.out.println("索引 " + i + ": " + numbers.get(i));
}
输出结果:

--- 方法一:使用传统的 for 循环 ---
水果列表:
索引 0: 苹果
索引 1: 香蕉
索引 2: 橙子
索引 3: 葡萄
数字列表:
索引 0: 10
索引 1: 20
索引 2: 30
索引 3: 40
索引 4: 50
使用增强 for 循环 (for-each loop)(推荐)
这是 Java 5 引入的特性,是遍历集合(包括 ArrayList)最推荐、最简洁的方式。
特点:
- 代码简洁,可读性高。
- 无需关心索引,直接获取集合中的元素。
- 缺点:无法在循环中获取元素的索引。
代码示例:
System.out.println("\n--- 方法二:使用增强 for 循环 (for-each) ---");
// 输出 String 类型的 ArrayList
System.out.println("水果列表:");
for (String fruit : fruits) {
System.out.println(fruit);
}
// 输出 Integer 类型的 ArrayList
System.out.println("\n数字列表:");
for (Integer number : numbers) {
System.out.println(number);
}
输出结果:

--- 方法二:使用增强 for 循环 (for-each) ---
水果列表:
苹果
香蕉
橙子
葡萄
数字列表:
10
20
30
40
50
使用 Java 8 的 Stream API(现代、功能强大)
这是 Java 8 引入的现代方法,非常灵活,不仅可以用于输出,还可以进行过滤、排序、转换等复杂的操作。
特点:
- 代码非常简洁,一行即可完成输出。
- 函数式编程风格,易于与其他 Stream 操作链式调用。
- 缺点:对于简单的遍历,可能显得有些“杀鸡用牛刀”。
代码示例:
System.out.println("\n--- 方法三:使用 Java 8 Stream API ---");
// 输出 String 类型的 ArrayList
System.out.println("水果列表:");
fruits.stream().forEach(System.out::println);
// 输出 Integer 类型的 ArrayList
System.out.println("\n数字列表:");
numbers.stream().forEach(System.out::println);
System.out::println 是一个方法引用,等同于 element -> System.out.println(element),表示对流中的每个元素执行 println 方法。
输出结果:
--- 方法三:使用 Java 8 Stream API ---
水果列表:
苹果
香蕉
橙子
葡萄
数字列表:
10
20
30
40
50
使用 toString() 方法(快速调试)
ArrayList 类重写了 Object 类的 toString() 方法,它会返回一个包含所有元素(用逗号和空格分隔)的字符串。
特点:
- 极其方便,一行代码即可打印整个列表的内容。
- 主要用途:用于调试(
System.out.println(list)),不适合在生产代码中格式化输出。
代码示例:
System.out.println("\n--- 方法四:使用 toString() 方法 ---");
// 直接打印 ArrayList
System.out.println("水果列表: " + fruits);
System.out.println("数字列表: " + numbers);
输出结果:
--- 方法四:使用 toString() 方法 ---
水果列表: [苹果, 香蕉, 橙子, 葡萄]
数字列表: [10, 20, 30, 40, 50]
使用 Arrays.toString()(不推荐,但需注意)
如果你有一个 ArrayList,并且错误地尝试使用 Arrays.toString(),你得到的不是列表的内容,而是列表的内存地址表示。
特点:
- 错误用法:
Arrays.toString()是为数组设计的,不适用于ArrayList。 - 结果:输出的是
ArrayList对象的字符串表示,而不是其包含的元素。
代码示例(错误示范):
import java.util.Arrays;
// ... 在 main 方法中 ...
System.out.println("\n--- 方法五:Arrays.toString() (错误用法) ---");
// 错误!这不会输出列表内容
System.out.println("错误的水果列表输出: " + Arrays.toString(fruits));
输出结果:
--- 方法五:Arrays.toString() (错误用法) ---
错误的水果列表输出: [Ljava.lang.String;@15db9742 // 这不是我们想要的
正确做法:直接使用 System.out.println(list),它会自动调用 ArrayList 自己的 toString() 方法(如方法四所示)。
总结与推荐
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 传统 for 循环 | 可获取索引,兼容所有 Java 版本 | 代码冗长 | 需要元素索引的遍历 |
| 增强 for 循环 | 代码简洁,可读性高 | 无法获取索引 | 绝大多数遍历场景,强烈推荐 |
| Stream API | 极其简洁,功能强大 | 对简单遍历可能“过度设计” | 需要链式操作(如过滤、映射)或函数式风格 |
toString() |
最快,最方便 | 输出格式固定([elem1, elem2]) |
快速调试,临时查看内容 |
推荐选择:
- 日常开发:优先使用 增强 for 循环,它是最平衡、最常用的选择。
- 快速调试:直接在
System.out.println()中传入ArrayList变量,利用其自带的toString()方法。 - 复杂操作:如果遍历之后还需要进行其他处理(如筛选、转换),使用 Stream API 会更优雅。
