JAVA---数组
·
一、数组是什么?
数组就是一个可以存放多个相同类型数据的容器,并且支持批量操作,数据在内存里连续存放,访问效率很高。
使用数组只需要三步:
- 声明:确定数组类型与名称
- 分配空间:确定数组能存多少数据
- 使用元素:通过下标存值、取值
二、数组的基础用法(必掌握)
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
三、数组的内存原理(理解重点)
- 数组在内存中是连续的存储空间
- 数组变量保存的是数组的首地址
- 访问公式:
首地址 + 下标 × 单个元素字节数 - 下标从 0 开始是为了提升寻址效率
- 数组之间赋值是传递地址,基本类型赋值是传递数值
四、数组扩容(面试高频)
数组长度一旦确定不能修改,想要存更多数据只能扩容。
扩容思路
- 新建一个更大的数组(通常是原长度 2 倍)
- 把旧数组内容复制到新数组
- 让原数组指向新数组地址
三种实现方式
- 手动循环复制
int[] newArr = new int[arr.length * 2];
for (int i = 0; i < arr.length; i++) {
newArr[i] = arr[i];
}
arr = newArr;
- System.arraycopy
System.arraycopy(arr, 0, newArr, 0, arr.length);
- 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 - 支持不规则二维数组(每行长度可不同
更多推荐




所有评论(0)