Java 数组 精华笔记

Java 数组 精华笔记 一、一维数组基础1. **概念**连续空间存储**多个同类型数据**。2. **使用步骤**- 声明数据类型[] 数组名;推荐写法- 分配空间数组名 new 数据类型[长度];- 存取元素依靠**下标**下标范围 0 ~ 数组长度-1 存数组名[下标] 值; 取数组名[下标] 3. **常见异常**下标越界 ArrayIndexOutOfBoundsException运行时报错4. **获取长度**数组名.length5. **数组遍历** java for(int i0; i数组名.length; i){ // 操作数组元素 数组名[i] } 6. **默认初始值**- 整数0 | 小数0.0 | 布尔false | 字符\u0000 | 引用类型null7. **三种初始化方式**1. 声明分配空间int[] arr new int[5];2. 标准静态初始化int[] arr new int[]{1,2,3};括号内不能写长度3. 简写静态初始化int[] arr {1,2,3};声明和赋值必须同行二、数组内存原理1. 数组内存空间**连续**数组名保存**内存首地址**。2. 基本类型赋值传递**数值**数组引用赋值传递**地址**。3. 下标从0开始提升寻址效率。三、数组扩容 思路新建更长数组 → 拷贝原元素 → 引用指向新数组通常扩容为原长度2倍1. 循环手动拷贝逐个遍历赋值2. 系统方法拷贝System.arraycopy(原数组, 原起始下标, 新数组, 新起始下标, 拷贝个数)3. 工具类扩容常用int[] 新数组 Arrays.copyOf(原数组, 新长度)四、可变长参数 1. 语法数据类型... 形参名本质是**数组**内部按数组使用。2. 规则一个方法只能有**一个**可变参数且必须放在**形参末尾**。3. 作用接收个数不固定的同类型实参。五、数组排序面试重点1. **冒泡排序**相邻元素两两比较大数后移 java for(int i1; iarr.length; i){ for(int j0; jarr.length-i; j){ if(arr[j] arr[j1]){ 交换两个元素 } } } 2. **选择排序**固定位置依次和后续元素比较小数前移 java for(int i0; iarr.length-1; i){ for(int ji1; jarr.length; j){ if(arr[i] arr[j]){ 交换两个元素 } } } 3. 工具排序快速排序Arrays.sort(数组名);六、二维数组1. 本质**一维数组的数组**通过[行标][列标]访问下标均从0开始。2. 获取长度行数 数组名.length指定行列数 数组名[行标].length3. 定义方式 - 标准int[][] arr new int[行数][列数]; - 静态初始化int[][] arr {{1,2},{3,4}};4. **不规则二维数组**各行列数不同- 定义int[][] arr new int[行数][]; 再单独为每行分配空间- 静态写法int[][] arr {{1},{2,3},{4,5,6}};- 规则可只指定行数**不能只指定列数**