Java数组详解:从入门到精通

下面是一份系统化、从基础到进阶的 Java 数组详解(从入门到精通),帮你一次性建立完整认知 👇


一、什么是数组?

👉 数组(Array)是一种用于存储同一类型多个数据的容器。

int[] arr = {1, 2, 3, 4};

特点:

  • 类型相同
  • 长度固定
  • 内存连续(重要!)

二、数组的定义与初始化

1️⃣ 静态初始化(推荐)

int[] arr = {1, 2, 3, 4};


2️⃣ 动态初始化

int[] arr = new int[5];

默认值:

  • int → 0
  • double → 0.0
  • boolean → false
  • 引用类型 → null

3️⃣ 完整写法

int[] arr = new int[]{1, 2, 3};


三、数组的基本操作

1️⃣ 访问元素

int x = arr[0];


2️⃣ 修改元素

arr[1] = 100;


3️⃣ 遍历数组

普通 for(最常用)

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


增强 for(foreach)

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

⚠️ 注意:不能修改数组元素


四、数组内存原理(核心理解)

int[] arr = new int[3];

👉 内存结构:

  • 栈:存储引用(arr)
  • 堆:存储实际数组对象

👉 本质:

arr 是“指向数组的地址”


五、常见操作(必会)

1️⃣ 求最大值

int max = arr[0];
for (int i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
        max = arr[i];
    }
}


2️⃣ 求和

int sum = 0;
for (int x : arr) {
    sum += x;
}


3️⃣ 查找元素

int target = 5;
for (int i = 0; i < arr.length; i++) {
    if (arr[i] == target) {
        System.out.println("找到索引:" + i);
    }
}


六、数组常见异常(重点)

❌ 1. 越界异常

arr[10]; // ArrayIndexOutOfBoundsException


❌ 2. 空指针异常

int[] arr = null;
arr.length; // NullPointerException


七、多维数组(二维数组)

1️⃣ 定义

int[][] arr = new int[3][4];

👉 3行4列


2️⃣ 初始化

int[][] arr = {
    {1, 2, 3},
    {4, 5, 6}
};


3️⃣ 遍历

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


4️⃣ 不规则数组(锯齿数组)

int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[5];
arr[2] = new int[3];


八、数组 vs 集合(重要区别)

对比数组集合(ArrayList等)
长度固定可变
类型基本类型 + 对象只能对象
性能更快略慢
功能简单丰富

九、常用工具类(进阶)

👉 Arrays 工具类(必须掌握)

import java.util.Arrays;


1️⃣ 排序

Arrays.sort(arr);


2️⃣ 转字符串

System.out.println(Arrays.toString(arr));


3️⃣ 查找(二分)

Arrays.binarySearch(arr, 5);

⚠️ 前提:必须已排序


4️⃣ 填充

Arrays.fill(arr, 0);


十、数组拷贝(高频考点)

1️⃣ 浅拷贝

int[] b = arr;

👉 指向同一内存!


2️⃣ 深拷贝

int[] b = Arrays.copyOf(arr, arr.length);


3️⃣ System.arraycopy(高效🔥)

System.arraycopy(arr, 0, b, 0, arr.length);


十一、排序算法(进阶)

1️⃣ 冒泡排序

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;
        }
    }
}


2️⃣ 选择排序(了解)


3️⃣ 快速排序(高阶)

👉 Java 内置排序底层就是优化版快排


十二、进阶技巧(精通关键)

⭐ 1. 数组作为方法参数

public static void print(int[] arr)

👉 传递的是引用!


⭐ 2. 可变参数(本质是数组)

public static void sum(int... nums)


⭐ 3. 数组转集合

List<Integer> list = Arrays.asList(1, 2, 3);


十三、面试高频坑

❌ 1. length vs length()

arr.length     // 数组
str.length()   // 字符串


❌ 2. foreach 修改无效

for (int x : arr) {
    x = 10; // ❌ 不影响原数组
}


❌ 3. Arrays.asList 限制

List<int[]> list = Arrays.asList(arr); // ⚠️ 陷阱


十四、性能与底层(进阶)

👉 数组优势:

  • O(1) 随机访问
  • 内存连续 → 缓存友好
  • 最接近底层的数据结构

👉 缺点:

  • 扩容困难
  • 插入删除成本高(O(n))

总结一句话

👉 数组本质:

“一块连续内存,用索引高效访问数据”


如果你想继续进阶👇

我可以帮你:

✅ 手写「十大经典数组算法题」
✅ 讲清「滑动窗口 / 双指针 / 前缀和」
✅ 或带你做「LeetCode 高频数组题」

文章已创建 5186

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部