杰瑞科技汇

ArrayList Java 输出时如何打印其内容?

创建一个示例 ArrayList

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

ArrayList Java 输出时如何打印其内容?-图1
(图片来源网络,侵删)
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("Apple", "Banana", "Cherry", "Date"));
        // 创建一个存储 Integer 类型的 ArrayList
        ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(10, 20, 30, 40, 50));
        System.out.println("--- 准备工作完成,开始演示不同输出方法 ---");
    }
}

使用传统的 for 循环(增强 for 循环 / for-each)

这是最基础、最直观的方法,适用于所有 Java 版本,并且非常高效。

特点:

  • 代码清晰易懂。
  • 只能用于遍历和读取元素,不能在遍历过程中修改 ArrayList 的结构(如删除元素)。
  • 推荐用于只读遍历。

代码示例:

// 输出 String 类型的 ArrayList
System.out.println("方法一:使用 for-each 循环输出水果列表");
for (String fruit : fruits) {
    System.out.println(fruit);
}
// 输出 Integer 类型的 ArrayList
System.out.println("\n方法一:使用 for-each 循环输出数字列表");
for (Integer number : numbers) {
    System.out.println(number);
}

输出结果:

ArrayList Java 输出时如何打印其内容?-图2
(图片来源网络,侵删)
使用 for-each 循环输出水果列表
Apple
Banana
Cherry
Date
方法一:使用 for-each 循环输出数字列表
10
20
30
40
50

使用传统的 for 循环(带索引)

如果你需要在遍历时获取元素的索引,或者需要根据索引修改元素,这种方法更合适。

特点:

  • 可以通过索引 i 访问元素。
  • 可以安全地删除元素(使用 list.remove(i))。
  • 代码比 for-each 循环稍显冗长。

代码示例:

System.out.println("\n方法二:使用带索引的 for 循环输出水果列表");
for (int i = 0; i < fruits.size(); i++) {
    // 获取索引和对应的值
    System.out.println("索引 [" + i + "]: " + fruits.get(i));
}

输出结果:

ArrayList Java 输出时如何打印其内容?-图3
(图片来源网络,侵删)
使用带索引的 for 循环输出水果列表
索引 [0]: Apple
索引 [1]: Banana
索引 [2]: Cherry
索引 [3]: Date

使用 Java 8+ 的 Stream API (推荐)

这是现代 Java 中最灵活、最强大的方式,它不仅用于打印,还可以进行各种复杂的转换和聚合操作。

特点:

  • 代码简洁,函数式风格。
  • 可以链式调用其他 Stream 操作(如 map, filter, sorted)。
  • 需要Java 8或更高版本。

代码示例:

System.out.println("\n方法三:使用 Java 8 Stream API 输出水果列表");
// 1. 最简单的打印方式
fruits.stream().forEach(System.out::println);
// 2. 更具表现力的方式,可以自定义格式
System.out.println("\n使用 Stream API 并添加格式:");
numbers.stream().forEach(number -> System.out.println("数字是: " + number));
  • fruits.stream():将 ArrayList 转换为一个 Stream(流)。
  • forEach(System.out::println):对流中的每一个元素执行 System.out.println 操作。System.out::println 是一个方法引用,等同于 element -> System.out.println(element)

输出结果:

使用 Java 8 Stream API 输出水果列表
Apple
Banana
Cherry
Date
使用 Stream API 并添加格式:
数字是: 10
数字是: 20
数字是: 30
数字是: 40
数字是: 50

使用 toString() 方法(调试用)

ArrayList (以及其父类 AbstractList) 重写了 toString() 方法,它会以 [elem1, elem2, elem3] 的格式返回列表的字符串表示形式。

特点:

  • 非常方便,一行代码即可。
  • 主要用于调试和日志记录,不适合用于最终的用户界面展示,因为它会把所有元素放在一行。

代码示例:

System.out.println("\n方法四:使用 toString() 方法");
System.out.println("水果列表的字符串形式: " + fruits);
System.out.println("数字列表的字符串形式: " + numbers);

输出结果:

使用 toString() 方法
水果列表的字符串形式: [Apple, Banana, Cherry, Date]
数字列表的字符串形式: [10, 20, 30, 40, 50]

使用 Arrays.toString() (错误的方式)

这是一个初学者常犯的错误Arrays.toString() 是用来打印数组的,不是 ArrayList,虽然可以编译,但结果不是你想要的。

错误代码示例:

// 错误示范!不要这样做!
System.out.println("\n方法五:错误示范 - 使用 Arrays.toString()");
// System.out.println(Arrays.toString(fruits)); // 这行代码会编译失败!
// 正确的用法是先将 ArrayList 转换为数组
System.out.println("错误的方式(先转数组再打印): " + Arrays.toString(fruits.toArray()));
  • fruits.toArray():将 ArrayList 转换为一个 Object 数组。
  • 然后对这个数组调用 Arrays.toString()

输出结果:

错误示范 - 使用 Arrays.toString()
错误的方式(先转数组再打印): [Apple, Banana, Cherry, Date]

你会发现,这个输出和方法四的 toString() 结果一模一样,这说明 ArrayListtoString() 内部很可能就是先转成数组再调用的 Arrays.toString()直接用 list.toString() 即可,无需多此一举


总结与推荐

方法 优点 缺点 推荐场景
for-each 循环 简单、高效、可读性高 无法获取索引,不能修改集合结构 日常遍历和打印的首选
带索引的 for 循环 可获取索引,可安全删除元素 代码稍显冗长 需要索引或修改集合元素时
Java 8 Stream API 功能强大、灵活、函数式风格 需要理解 Stream 概念,对新手有门槛 现代Java开发,需要复杂操作时
list.toString() 一行代码搞定,方便调试 输出格式固定,不适合UI展示 调试和日志记录

最终建议:

  • 如果只是简单地打印所有元素,使用 for-each 循环 是最稳妥、最经典的选择。
  • 如果你在使用 Java 8 或更高版本,并且希望代码更现代化,使用 Stream API 是非常好的习惯。
  • 如果你在调试代码,直接在 System.out.println() 里传入 ArrayList 变量,它会自动调用 toString() 方法,非常方便。
分享:
扫描分享到社交APP
上一篇
下一篇