1. 什么是数组?为什么需要它?

📚 类比——课桌抽屉:数组就是一排编号的抽屉(0 号、1 号、2 号…)。
以前存 5 个分数要 5 个变量(s1,s2,s3,s4,s5),用数组只要一个变量名 + 编号:scores[0] ~ scores[4]。
最关键的是:编号可以用变量(scores[i]),配合循环一次处理所有抽屉!

数组的特点:

数组的三种创建方式
// 方式 1:声明并指定长度(元素默认 0/null)
int[] scores = new int[5];
scores[0] = 90;              // 给第 1 个赋值

// 方式 2:直接初始化(推荐,最直观)
int[] nums = {10, 20, 30, 40};   // 长度自动 = 4

// 方式 3:new + 初始化
String[] names = new String[]{"张三", "李四"};

🎯 必记

  • 长度:arr.length(注意:没有括号,是属性不是方法)
  • 最后一个元素:arr[arr.length - 1](下标越界是新手第一大错误!)
  • 越界报错:ArrayIndexOutOfBoundsException(数组下标越界异常)

2. 遍历数组的两种写法?

for 循环遍历 + 增强 for
int[] nums = {10, 20, 30, 40};

// 方式 1:普通 for(需要下标时用——如求和、改值)
int sum = 0;
for (int i = 0; i < nums.length; i++) {
    sum += nums[i];
}
System.out.println("总和: " + sum);
总和: 100

// 方式 2:增强 for(只读遍历时用,更简洁)
for (int n : nums) {        // 读作:for each n in nums
    System.out.print(n + " ");
}
10 20 30 40

🎯 选择

  • 需要下标 i(改值/找位置/两个数组联动)→ 普通 for
  • 只要读一遍 → 增强 for(也更安全,不会越界)

3. 数组的经典操作套路?

求最大值/最小值
int[] nums = {34, 78, 12, 90, 45};
int max = nums[0];                    // 假设第 1 个最大
for (int i = 1; i < nums.length; i++) {
    if (nums[i] > max) max = nums[i];  // 发现更大的就换
}
System.out.println("最大: " + max);
最大: 90
数组反转(面试高频)
int[] a = {1, 2, 3, 4, 5};
int left = 0, right = a.length - 1;
while (left < right) {               // 双指针向中间靠
    int tmp = a[left];                // 交换三连
    a[left] = a[right];
    a[right] = tmp;
    left++; right--;
}
// 结果:{5,4,3,2,1}

🎯 必会套路

  • 求最大/最小:假设第一个,逐个比
  • 交换两个元素:temp 临时变量三连(新手必须手写会)
  • 查找元素位置:遍历 + 相等判断

4. 二维数组和 Arrays 工具类?

二维数组:数组的数组——像表格(行和列)。arr[行][列]。

二维数组:成绩表(3 行 4 列)
int[][] scores = {
    {85, 90, 78, 92},   // 第 1 个学生 4 科成绩
    {76, 88, 95, 70},   // 第 2 个学生
    {90, 91, 87, 89}    // 第 3 个学生
};
System.out.println(scores[1][2]);   // 第 2 个学生的第 3 科 = 95
95

// 双层循环遍历(外层行,内层列)
for (int i = 0; i < scores.length; i++) {
    for (int j = 0; j < scores[i].length; j++) {
        System.out.print(scores[i][j] + " ");
    }
    System.out.println();
}

Arrays 工具类(java.util.Arrays,静态方法直接调):

方法 作用 例子
Arrays.toString(a)把数组变成可读字符串[1, 2, 3](打印数组必用!)
Arrays.sort(a)升序排序(原地){3,1,2} → {1,2,3}
Arrays.binarySearch(a, x)二分查找(须先排序)返回下标或负数
Arrays.fill(a, v)全部填充某值初始化棋盘
Arrays.copyOf(a, n)拷贝前 n 个扩容数组
Arrays.equals(a, b)比较两个数组内容== 比引用,这个比内容

✍️ 练习题

  • 1. 创建一个 5 个元素的数组并循环赋值 1~5,再打印
  • 2. 求数组 {5,9,3,7,1} 的最大值、最小值、总和、平均值
  • 3. 统计数组中有几个偶数
  • 4. 两个数组对比:{1,2,3} 和 {1,2,3} 用 == 判断是 true 还是 false?为什么?(答案:false,== 比的是引用;用 Arrays.equals)
  • 5. 挑战:把数组 {1,2,3,4,5} 循环右移 1 位(变成 {5,1,2,3,4})
  • 6. 挑战:找出数组中第二大的数
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。