一、数组是什么?

数组就是一个可以存放多个相同类型数据的容器,并且支持批量操作,数据在内存里连续存放,访问效率很高。

使用数组只需要三步:

  1. 声明:确定数组类型与名称
  2. 分配空间:确定数组能存多少数据
  3. 使用元素:通过下标存值、取值

二、数组的基础用法(必掌握)

1. 声明与创建

// 声明
int[] arr;
// 分配空间
arr = new int[5];

合并写法:

int[] arr = new int[5];

直接赋值(最常用):

int[] arr = {1, 3, 5, 7, 9};

2. 下标规则

  • 下标从 0 开始
  • 合法范围:0 ~ 长度-1
  • 超出范围会报:ArrayIndexOutOfBoundsException

3. 存取元素

  • 存:arr[0] = 10;
  • 取:int num = arr[0];

4. 数组遍历

用 for 循环配合下标遍历:

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

数组名.length 可以直接获取数组长度。

5. 数组默认值

创建数组后未赋值,系统会自动赋默认值:

  • 整数:0
  • 小数:0.0
  • 布尔:false
  • 字符:\u0000
  • 引用类型:null

三、数组的内存原理(理解重点)

  1. 数组在内存中是连续的存储空间
  2. 数组变量保存的是数组的首地址
  3. 访问公式:首地址 + 下标 × 单个元素字节数
  4. 下标从 0 开始是为了提升寻址效率
  5. 数组之间赋值是传递地址,基本类型赋值是传递数值

四、数组扩容(面试高频)

数组长度一旦确定不能修改,想要存更多数据只能扩容。

扩容思路

  1. 新建一个更大的数组(通常是原长度 2 倍)
  2. 把旧数组内容复制到新数组
  3. 让原数组指向新数组地址

三种实现方式

  1. 手动循环复制
int[] newArr = new int[arr.length * 2];
for (int i = 0; i < arr.length; i++) {
    newArr[i] = arr[i];
}
arr = newArr;
  1. System.arraycopy
System.arraycopy(arr, 0, newArr, 0, arr.length);
  1. Arrays.copyOf(最简洁)
arr = Arrays.copyOf(arr, arr.length * 2);

五、可变长参数

JDK 5 新增特性,允许方法接收个数不固定的同类型参数。

语法:

public static void print(int... nums) {
    // 内部直接当数组使用
    for (int n : nums) {
        System.out.println(n);
    }
}

规则:

  • 一个方法最多一个可变参数
  • 必须放在参数列表最后一位
  • 底层自动封装为数组

六、数组排序

1. 冒泡排序

相邻两两比较,大的往后移:

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

2. 选择排序

固定位置,找最小值交换到前面:

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

3. 工具类排序(开发用)

Arrays.sort(arr);

七、二维数组

二维数组就是数组里面装数组,可以看作表格结构。

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

使用:

  • 访问:arr[行][列]
  • 行数:arr.length
  • 列数:arr[i].length
  • 支持不规则二维数组(每行长度可不同
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐