诸位道友:
江湖路远,修行不易。我等寒窗磨剑十余载,如今剑锋将试霜雪,正是破茧之时。且看那九霄云外的登天阁,虽台阶千重,然剑气连营处,自有同道并肩而行。
一,数组的概述
定义:相同类型数据的有序集合
特点:
- 长度固定(创建后不可改变)
- 元素类型必须相同
- 通过索引访问(从0开始)
- 内存中连续存储
分类:
- 一维数组
- 多维数组(二维数组最常见)
二,一维数组的基本操作
①,声名与初始化
// 声明
数据类型[] 数组名; // 推荐写法
数据类型 数组名[]; // C风格(合法但不推荐)
// 初始化方式
int[] arr1 = {1,2,3}; // 静态初始化
int[] arr2 = new int[5]; // 动态初始化(默认值:int=0, boolean=false等)
int[] arr3 = new int[]{1,2,3}; // 动态初始化带值
②,访问与修改
arr[0] = 10; // 修改第一个元素
int num = arr[1]; // 访问第二个元素
int len = arr.length; // 获取数组长度(不是方法)
③,遍历方式
// 普通for循环
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
// 增强for循环(只读)
for(int num : arr){
System.out.println(num);
}
// Arrays.toString()方法
System.out.println(Arrays.toString(arr));
三,多维数组(以二维数组为例)
①,声名与初始化
// 静态初始化
int[][] matrix = {{1,2}, {3,4}, {5,6}};
// 动态初始化
int[][] matrix = new int[3][2]; // 规则二维数组
int[][] matrix = new int[3][]; // 不规则数组(第二维单独初始化)
②,访问与遍历
// 嵌套循环遍历
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();
}
四、数组工具类 Arrays
1,常用方法
// 排序
Arrays.sort(arr);
// 二分查找(需先排序)
int index = Arrays.binarySearch(arr, key);
// 填充
Arrays.fill(arr, 100); // 全部填充为100
// 数组复制
int[] copy = Arrays.copyOf(原数组, 新长度);
// 数组比较
Arrays.equals(arr1, arr2);
// 转换为List
List<Integer> list = Arrays.asList(arr);
2,注意事项
- Arrays.asList() 返回的List不可修改
- 多维数组比较需用 deepEquals()
五、注意事项
- 索引越界:访问时注意索引范围(0 ~ length-1)
- 空指针异常:数组未初始化时使用会抛出NullPointerException
- 数组复制:
- System.arraycopy()(高效)
- Arrays.copyOf()(推荐)
- clone()方法
4.性能优化:
- 优先使用一维数组
- 避免频繁扩容(预估容量)
5.与集合的区别:
- 数组长度固定,集合可动态扩展
- 数组可以存储基本类型,集合只能存储对象
- 数组效率更高,集合功能更丰富
六,数组的运行原理
七,数组的应用场景与常见问题
- 存储固定数量的同类数据
- 矩阵运算
- 排序算法实现
- 缓存临时数据
- 作为方法参数/返回值
常见问题:
1、多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?
- 多个数组变量中存储的是同一个数组对象的地址。
- 多个变量修改的都是同一个数组对象中的数据。
2、如果某个数组变量中存储的为Null,代表什么意思?需要注意什么?
- 代表这个数组变量没有指向数组对象。
- 可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度,
会报空指针异常:NullPointerException。
八,补充知识(IDEA中Debug工具的使用)
修炼心法总纲
"数组之道,贵在守序如剑气长城,变通似陈平安破境。
初学时当如李槐持木剑,规规矩矩走桩;
精通后可学曹慈拳意,以多维数组演化天地经纬。
切记:NullPointerException乃心魔劫,Arrays类即护道人"