ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Java 数组从入门到掌握|一维数组、扩容、排序、二维数组详解

2026/8/26 17:01:13 拓冰建站 浏览量
Java 数组从入门到掌握|一维数组、扩容、排序、二维数组详解 一、引入单个变量只能保存一份数据如果需要操作大量数据就要定义很多独立变量编码十分繁琐。普通变量无法完成批量统一操作。解决方案使用数组。二、一维数组1. 概念一次性分配多个相同数据类型的内存空间可以对这批空间做统一操作。2. 数组声明与分配空间数组声明三种写法推荐第一种//推荐写法 数据类型[] 数组名; //写法二 数据类型 [] 数组名; //写法三C语言风格不推荐 数据类型 数组名[];分配堆内存空间长度代表数组能够存储元素的总个数数组名 new 数据类型[长度];3. 数组使用细节下标索引每个存储空间的编号从 0 开始范围0 ~ 数组长度‑1数组访问//赋值 数组名[下标] 数据; //取值访问 数组名[下标];下标越界异常访问下标超过最大下标编译不报错运行抛出java.lang.ArrayIndexOutOfBoundsException数组下标越界。数组遍历循环逐个访问数组中全部元素一般使用for循环。获取数组长度数组名.length数组元素默认初始值数组一旦创建系统自动给每个元素赋默认值 | 数据类型 | 默认值 | | ---- | ---- | | 整数 (byte/short/int/long)|0| | 浮点 (float/double)|0.0| |char|\u0000空字符 | |boolean|false| | 引用类型 (String、对象等)|null|4. 数组其他定义初始化方式声明同时分配空间数据类型[] 数组名 new 数据类型[长度];声明同时显示初始化方式一数据类型[] 数组名 new 数据类型[]{值1,值2,值3};注意数组长度由大括号内元素个数决定[]中不能写长度。声明同时显示初始化方式二简写数据类型[] 数组名 {值1,值2,值3};注意该写法声明和初始化必须写在同一行不能分开。三、数组内存原理数组在堆内存中占用连续的内存空间。寻址公式首地址 下标 * 对应数据类型字节数栈、堆分工栈存放数组变量数组名保存数组在堆中的首地址。堆存放数组真实元素空间。数组变量互相赋值传递的是堆内存的首地址两个变量指向同一块数组。数组作为函数返回值返回的也是数组堆内存的首地址。四、数组扩容1. 扩容原因数组空间一旦分配完成长度不可修改。原有数组存满想要继续保存数据就需要数组扩容。2. 扩容核心思想创建一个长度更大的新数组通常为原数组 2 倍将旧数组全部元素拷贝到新数组把新数组首地址赋值给旧数组变量覆盖旧地址3. 三种扩容实现方式方式 1手动完成三步手动拷贝循环赋值创建更大长度新数组for 循环遍历原数组把元素逐个拷贝到新数组将新数组地址赋值给原数组变量方式 2System.arraycopy 工具拷贝只完成拷贝逻辑不会自动创建新数组//System.arraycopy(原数组,原数组起始下标,目标数组,目标数组起始下标,拷贝元素个数) System.arraycopy(a,0,b,0,a.length);方式 3Arrays.copyOf最简洁需要导包import java.util.Arrays;//参数1原数组参数2新数组长度 int[] newArr Arrays.copyOf(a,a.length*2);五、可变长参数概念函数接收参数的个数不固定可以动态变化。语法public static 返回值类型 函数名(数据类型...参数名){ }底层原理调用时传入的若干实参会自动封装成对应类型的数组可变参数在函数内部直接当做数组使用。⚠️重要限制一个方法最多只能定义一个可变长参数可变长参数必须放在形参列表的最后位置。六、数组排序排序按照指定规则对数组内元素重新排列。冒泡排序相邻两个元素两两比较如果前大于后就交换每一轮把当前无序区间最大的元素向后移动。支持升序、降序。选择排序每一轮固定一个下标拿该下标元素和后面所有元素比较满足条件就交换每一轮选出无序区间最小升序或者最大元素。JDK 工具类排序底层快速排序import java.util.Arrays; Arrays.sort(数组名);七、二维数组本质一维数组里面存放一维数组。1. 声明与分配空间//声明 数据类型[][] 数组名; //分配空间行数、列数 数组名 new 数据类型[行数][列数];2. 使用细节访问格式数组名[行标][列标]行标、列标全部从 0 开始。二维数组元素默认值和一维数组完全一致。获取行列长度数组名.length; //获取行数 数组名[行标].length; //获取指定行的列数3. 二维数组多种定义方式只指定行数列可以后续分配只允许省略列不能省略行数据类型[][] 数组名; 数组名 new 数据类型[行数][];同时指定行列数据类型[][] 数组名 new 数据类型[行数][列数];初始化方式一数据类型[][] 数组名 new 数据类型[][]{{值1,值2},{值3,值4},{值5,值6}};行数由外层大括号内部{}数量决定每一行的列数由内层{}内部元素决定[][]中不能写行列数字。简写初始化声明和初始化必须同时写数据类型[][] 数组名 {{值1,值2},{值3,值4},{值5,值6}};4. 不规则二维数组每一行拥有的列数不相等。 写法 1int[][] arr; arr new int[3][]; arr[0] new int[2]; arr[1] new int[4]; arr[2] new int[1];写法 2int[][] arr new int[][]{{1,2,3},{4},{5,6},{7}};写法 3 简写int[][] arr {{1,2,3},{4},{5,6},{7}};