版本:基于 Java 17 & Java 21 LTS

在 Java 中,处理一组数据是极其常见的需求。本篇我们将从传统的数组出发,逐步过渡到功能更强大、使用更灵活的集合框架(Collections Framework)。


1. 传统的数组 (Arrays)

数组是内存中连续的存储空间,大小固定,性能最优。

1.1 声明与初始化

// 静态初始化
int[] numbers = {1, 2, 3, 4, 5};

// 动态初始化:必须指定长度
var fruits = new String[3];
fruits[0] = "Apple";

// 二维数组 (多维数组)
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6}
};

1.2 Arrays 工具类 (java.util.Arrays)

处理数组时,永远优先考虑 Arrays 提供的静态方法:

import java.util.Arrays;

int[] arr = {3, 1, 4, 2};
Arrays.sort(arr);           // 排序
Arrays.fill(arr, 0);       // 填充
Arrays.toString(arr);      // 快速打印数组内容
Arrays.equals(arr1, arr2); // 比较两个数组内容

2. 现代集合框架 (Collections)

2.1 核心体系结构

Java 集合类库主要分为两大接口:Collection (单列) 和 Map (双列/键值对)。

  • List (有序、可重复):ArrayList, LinkedList

  • Set (无序、唯一):HashSet, TreeSet (排序)

  • Map (键值对):HashMap, TreeMap (按键排序)

2.2 不可变集合 (Immutable Collections)

在现代 Java 开发中,如果你确定集合不需要修改,应优先使用工厂方法:

var list = List.of("A", "B", "C");
var set = Set.of(1, 2, 3);
var map = Map.of("Key", "Value", "ID", 101);

3. 常用操作与技巧

3.1 集合排序

import java.util.Collections;
import java.util.ArrayList;

var scores = new ArrayList<Integer>();
scores.add(90);
scores.add(85);

// 现代写法:List 接口自带 sort
scores.sort(java.util.Comparator.naturalOrder()); // 升序

3.2 集合与数组的转换

// 集合转数组
String[] array = list.toArray(new String[0]);

// 数组转集合
List<String> listFromArray = Arrays.asList("x", "y", "z");

4. 集合处理的灵魂:Stream API 初探

现代 Java 几乎不再手动遍历集合进行复杂筛选,而是使用流式处理:

var numbers = List.of(1, 2, 3, 4, 5, 6);

// 过滤偶数并求和
int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)
                 .mapToInt(Integer::intValue)
                 .sum();

本章小结

第三篇我们深度学习了:

  1. 数组的内存特性与 Arrays 工具类。

  2. 集合框架的三巨头:List, Set, Map

  3. 不可变集合的创建方式。

  4. 集合排序、转换及 Stream API 的初步应用。

下一篇预告:面向对象基础 (类、对象、封装、初始化块)