杰瑞科技汇

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("苹果", "香蕉", "橙子", "葡萄"));
        // 创建一个存储 Integer 类型数据的 ArrayList
        ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(10, 20, 30, 40, 50));
        // 创建一个存储自定义对象 User 的 ArrayList (见下文)
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("张三", 25));
        users.add(new User("李四", 30));
    }
}
// 自定义 User 类
class User {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 为了方便输出,重写 toString() 方法
    @Override
    public String toString() {
        return "User{name='" + name + "', age=" + age + "}";
    }
}

使用传统的 for 循环 (经典方法)

这是最基础、最通用的方法,适用于所有版本的 Java,你可以通过索引逐个访问并打印 ArrayList 中的元素。

优点:

  • 灵活性高,可以在循环内部获取索引,方便进行更复杂的操作。
  • 兼容性最好,适用于所有 Java 版本。

缺点:

  • 代码相对冗长。

示例代码:

arraylist 输出 java-图2
(图片来源网络,侵删)
System.out.println("--- 方法一:传统 for 循环 ---");
// 输出 String 类型的 ArrayList
for (int i = 0; i < fruits.size(); i++) {
    System.out.println(fruits.get(i));
}
// 输出 Integer 类型的 ArrayList
for (int i = 0; i < numbers.size(); i++) {
    System.out.println(numbers.get(i));
}

输出:

--- 方法一:传统 for 循环 ---
苹果
香蕉
橙子
葡萄
10
20
30
40
50

使用增强 for 循环 (For-Each 循环)

这是目前最常用、最简洁的遍历 Collection(包括 ArrayList)的方法,它语法简单,可读性强。

优点:

  • 代码简洁,易于阅读。
  • 适用于只需要元素值,不需要索引的场景。

缺点:

arraylist 输出 java-图3
(图片来源网络,侵删)
  • 无法直接获取元素的索引。

示例代码:

System.out.println("\n--- 方法二:增强 for 循环 (For-Each) ---");
// 输出 String 类型的 ArrayList
for (String fruit : fruits) {
    System.out.println(fruit);
}
// 输出 Integer 类型的 ArrayList
for (Integer number : numbers) {
    System.out.println(number);
}

输出:

--- 方法二:增强 for 循环 (For-Each) ---
苹果
香蕉
橙子
葡萄
10
20
30
40
50

使用 Java 8+ 的 Stream API (函数式编程风格)

如果你使用的是 Java 8 或更高版本,Stream API 提供了一种非常强大和灵活的方式来处理集合,包括输出。

优点:

  • 链式调用,代码风格现代、函数式。
  • 可以轻松地进行过滤、排序、转换等操作后再输出。

缺点:

  • 对于简单的输出,可能显得有些“重”。

示例代码:

System.out.println("\n--- 方法三:Java 8+ Stream API ---");
// 输出 String 类型的 ArrayList
// forEach 是一个终端操作,对流中的每个元素执行操作
fruits.stream().forEach(System.out::println);
// 输出 Integer 类型的 ArrayList
numbers.stream().forEach(System.out::println);
// Stream API 的高级示例:只输出偶数
System.out.println("\n--- Stream API 高级示例:只输出偶数 ---");
numbers.stream()
       .filter(n -> n % 2 == 0) // 过滤出偶数
       .forEach(System.out::println);

输出:

--- 方法三:Java 8+ Stream API ---
苹果
香蕉
橙子
葡萄
10
20
30
40
50
--- Stream API 高级示例:只输出偶数 ---
10
20
30
40
50

System.out::println 是一个方法引用,等同于 element -> System.out.println(element),是 Java 8 的一个语法糖。


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

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

优点:

  • 极其方便,一行代码即可完成。
  • 非常适合在调试(System.out.println())或日志记录时快速查看 ArrayList 的内容。

缺点:

  • 输出格式是固定的,无法自定义。
  • ArrayList 中存储的是自定义对象,并且你没有重写该对象的 toString() 方法,输出结果将是对象的内存地址(如 com.example.User@1b6d3586),这通常不是我们想要的。

示例代码:

System.out.println("\n--- 方法四:使用 toString() 方法 ---");
// 输出 String 类型的 ArrayList
System.out.println(fruits); // ArrayList<String> 的 toString() 会调用每个元素的 toString()
// 输出 Integer 类型的 ArrayList
System.out.println(numbers);
// 输出自定义对象 User 的 ArrayList
// 注意:因为我们已经在 User 类中重写了 toString(),所以输出是友好的
System.out.println(users);

输出:

--- 方法四:使用 toString() 方法 ---
[苹果, 香蕉, 橙子, 葡萄]
[10, 20, 30, 40, 50]
[User{name='张三', age=25}, User{name='李四', age=30}]

使用 Arrays.toString() (不推荐,但需了解)

注意: 这个方法不适用于 ArrayListArrays.toString() 是用来打印数组的,如果你把它用在 ArrayList 上,它会输出 ArrayList 对象本身的地址信息,而不是其内容。

错误示例:

// 错误用法!这不会输出 ArrayList 的内容
System.out.println(Arrays.toString(fruits)); 

错误输出:

[[Ljava.lang.String;@15db9742] // 这不是我们想要的结果

要使用 Arrays.toString() 的正确方式是先将 ArrayList 转换为数组。

// 正确用法:先将 ArrayList 转换为数组
System.out.println(Arrays.toString(fruits.toArray())); 

正确输出:

[苹果, 香蕉, 橙子, 葡萄]

虽然可行,但不如直接使用 System.out.println(fruits) 来得简洁。


总结与推荐

方法 优点 缺点 适用场景
传统 for 循环 灵活性高,可获取索引 代码冗长 需要在遍历时使用索引的场景
增强 for 循环 代码简洁,可读性强 无法获取索引 日常开发中最推荐,仅遍历元素值
Stream API 功能强大,链式操作,函数式风格 对简单任务可能过重 Java 8+ 项目,需要结合过滤、排序等操作时
toString() 最方便,一行代码搞定 格式固定,对自定义对象有要求 调试和日志记录,快速查看内容
Arrays.toString() (不适用) (不适用) 错误用法,请勿直接用于 ArrayList

最终建议:

  • 日常开发/快速调试: 优先使用 System.out.println(yourArrayList)
  • 遍历并处理每个元素: 优先使用增强 for 循环 (for (T item : list)),它最直观、最常用。
  • 需要复杂操作(如过滤后输出): 使用 Stream API。
  • 需要索引: 使用传统 for 循环。
分享:
扫描分享到社交APP
上一篇
下一篇