Java: 数组

数组是存储同类型数据的容器,本课学习Java中数组的使用。

1. 什么是数组

数组是固定大小的同类型数据集合。

(1) 数组特点

特点 说明
固定大小 创建后大小不能改变
同类型 所有元素类型相同
连续存储 元素在内存中连续存放
索引访问 通过索引(从0开始)访问元素

2. 声明与初始化

(1) 方式1:先声明后初始化

JAVA
// 声明数组
int[] arr;

// 初始化(分配空间)
arr = new int[5];  // 5个元素,默认值为0

(2) 方式2:声明并初始化

JAVA
// 指定大小
int[] arr = new int[5];

// 直接赋值
int[] arr = {1, 2, 3, 4, 5};

▶ 示例:数组初始化

JAVA
public class ArrayInit {
    public static void main(String[] args) {
        // 方式1:指定大小
        int[] arr1 = new int[3];
        arr1[0] = 10;
        arr1[1] = 20;
        arr1[2] = 30;
        
        // 方式2:直接赋值
        int[] arr2 = {10, 20, 30};
        
        // 方式3:new + 赋值
        int[] arr3 = new int[]{10, 20, 30};
        
        System.out.println(arr2[0]);  // 10
        System.out.println(arr2[1]);  // 20
        System.out.println(arr2[2]);  // 30
    }
}
▶ 试一试
⚠️ 注意: 数组索引从0开始,最大索引是长度-1。访问越界会抛出ArrayIndexOutOfBoundsException


3. 访问与修改

JAVA
int[] arr = {10, 20, 30, 40, 50};

// 访问元素
int first = arr[0];   // 10
int third = arr[2];   // 30

// 修改元素
arr[1] = 200;         // 把20改为200

// 获取数组长度
int len = arr.length; // 5

4. 遍历数组

(1) 方式1:普通for循环

JAVA
int[] arr = {10, 20, 30, 40, 50};

for (int i = 0; i < arr.length; i++) {
    System.out.println("arr[" + i + "] = " + arr[i]);
}

(2) 方式2:for-each循环

JAVA
int[] arr = {10, 20, 30, 40, 50};

for (int num : arr) {
    System.out.println(num);
}

▶ 示例:求平均值

JAVA
public class ArrayAverage {
    public static void main(String[] args) {
        int[] scores = {85, 92, 78, 96, 88};
        int sum = 0;
        
        for (int score : scores) {
            sum += score;
        }
        
        double avg = (double) sum / scores.length;
        System.out.println("平均分:" + avg);  // 87.8
    }
}
▶ 试一试

5. Arrays工具类

java.util.Arrays提供了数组操作的工具方法。

(1) 常用方法

方法 说明 示例
sort() 排序 Arrays.sort(arr)
copyOf() 复制 Arrays.copyOf(arr, newLen)
fill() 填充 Arrays.fill(arr, value)
equals() 比较 Arrays.equals(arr1, arr2)
toString() 转字符串 Arrays.toString(arr)
binarySearch() 二分查找 Arrays.binarySearch(arr, key)

▶ 示例:Arrays使用

JAVA
import java.util.Arrays;

public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr = {5, 2, 8, 1, 9, 3};
        
        // 排序
        Arrays.sort(arr);
        System.out.println("排序后:" + Arrays.toString(arr));
        // [1, 2, 3, 5, 8, 9]
        
        // 复制
        int[] arr2 = Arrays.copyOf(arr, 3);
        System.out.println("复制前3个:" + Arrays.toString(arr2));
        // [1, 2, 3]
        
        // 填充
        int[] arr3 = new int[5];
        Arrays.fill(arr3, 100);
        System.out.println("填充后:" + Arrays.toString(arr3));
        // [100, 100, 100, 100, 100]
        
        // 查找(需要先排序)
        int index = Arrays.binarySearch(arr, 5);
        System.out.println("5的索引:" + index);  // 3
    }
}
▶ 试一试

6. 二维数组

二维数组可以理解为"数组的数组"。

(1) 声明与初始化

JAVA
// 方式1:指定大小
int[][] matrix = new int[3][4];  // 3行4列

// 方式2:直接赋值
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

▶ 示例:遍历二维数组

JAVA
public class TwoDArrayDemo {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        
        // 遍历
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
        // 输出:
        // 1 2 3
        // 4 5 6
        // 7 8 9
    }
}
▶ 试一试

▶ 示例:矩阵转置

JAVA
public class MatrixTranspose {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6}
        };
        
        // 转置:2行3列 → 3行2列
        int[][] transposed = new int[3][2];
        
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                transposed[j][i] = matrix[i][j];
            }
        }
        
        // 打印转置后的矩阵
        for (int[] row : transposed) {
            System.out.println(java.util.Arrays.toString(row));
        }
        // [1, 4]
        // [2, 5]
        // [3, 6]
    }
}
▶ 试一试

7. 可变参数

可变参数允许方法接受不定数量的参数。

(1) 语法

JAVA
public static int sum(int... numbers) {
    int total = 0;
    for (int num : numbers) {
        total += num;
    }
    return total;
}

▶ 示例:可变参数

JAVA
public class VarargsDemo {
    public static void main(String[] args) {
        System.out.println(sum(1, 2));           // 3
        System.out.println(sum(1, 2, 3));        // 6
        System.out.println(sum(1, 2, 3, 4, 5));  // 15
    }
    
    public static int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }
}
▶ 试一试
⚠️ 注意: 可变参数必须是方法的最后一个参数,一个方法只能有一个可变参数。


8. 常见数组算法

▶ 示例:冒泡排序

JAVA
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {5, 2, 8, 1, 9, 3};
        
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        
        System.out.println(java.util.Arrays.toString(arr));
        // [1, 2, 3, 5, 8, 9]
    }
}
▶ 试一试

▶ 示例:求最大值

JAVA
public class FindMax {
    public static void main(String[] args) {
        int[] arr = {5, 2, 8, 1, 9, 3};
        int max = arr[0];
        
        for (int num : arr) {
            if (num > max) {
                max = num;
            }
        }
        
        System.out.println("最大值:" + max);  // 9
    }
}
▶ 试一试

❓ 常见问题

Q 数组长度可以改变吗?
A 不可以。数组长度固定,如果需要动态大小,使用ArrayList。
Q 数组有默认值吗?
A 有。int默认0,double默认0.0,boolean默认false,引用类型默认null。
Q Arrays.sort()是什么排序算法?
A 对于基本类型用双轴快排,对于对象类型用TimSort(归并排序的变种)。

📖 小节

📝 作业

  1. 数组操作: 创建一个10个元素的数组,赋值1-10,然后逆序输出
  2. 查找最大值: 找出数组中的最大值和最小值
  3. 冒泡排序: 实现冒泡排序算法,对数组进行升序排序

下一课

下一课我们将学习 实战:基础综合,综合运用前7课的知识。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏