《Java 100 天进阶之路》第31篇:Java数组详解 第31篇Java数组详解系列导航《Java 100 天进阶之路》完整目录 |⬅️ 上一篇第30篇Date类、Calendar类、date转calendar |➡️ 下一篇第32篇Java常用工具类Objects、Collections、Arrays深入一、核心知识点数组的定义固定长度、相同类型元素的连续内存块数组的初始化静态初始化、动态初始化数组的遍历普通 for、增强 for内存结构数组变量在栈数组对象在堆多维数组数组的数组可非矩形即“交错数组”Arrays工具类常用方法sort()、binarySearch()、fill()、equals()、toString()、copyOf()二、通俗讲解1分钟开心学1. 数组是什么数组是一个容器可以存放多个相同类型的数据。它有两个重要特征长度固定一旦创建不能增加或减少。类型统一要么全是int要么全是String等。生活类比数组就像一个带编号的储物柜柜子数量固定长度每个格子只能放同一种类型的东西类型统一你可以通过编号索引快速存取。2. 数组的声明与初始化静态初始化创建时直接指定元素值。int[] arr {1,2,3};动态初始化先指定长度后赋值。int[] arr new int[5];元素有默认值int→0boolean→false引用类型→null。3. 数组的内存数组变量引用存储在栈内存中指向堆中的数组对象。数组对象在堆中是一片连续的内存空间每个元素根据类型占用固定字节。4. 多维数组——数组的数组Java中没有真正的二维数组二维数组实际上是“数组的数组”。每个内层数组可以长度不同非矩形数组称为交错数组。例如int[][] ragged new int[2][];ragged[0] new int[2];ragged[1] new int[5];——第一行2个格子第二行5个格子内存布局灵活但访问稍慢。生活类比多维数组就像抽屉里的文件夹。外层数组是抽屉柜每个抽屉是一个数组引用每个抽屉里放着一个独立的文件夹内层数组文件夹的页数长度可以各不相同。5. Arrays 工具类Java 提供了java.util.Arrays包含大量操作数组的静态方法比如排序、二分查找、填充、比较、转字符串等。三、实操代码案例 场景说明场景存储班级学生成绩计算总分、最高分、排序并体验一维与二维数组。importjava.util.Arrays;publicclassArrayDemo{publicstaticvoidmain(String[]args){// 一维数组 // 1. 静态初始化int[]scores{85,92,78,90,88};// 2. 动态初始化int[]anothernewint[10];// 默认值0// 3. 遍历求总分和最高分intsum0;intmaxscores[0];for(inti0;iscores.length;i){sumscores[i];if(scores[i]max)maxscores[i];}System.out.println(总分sum平均分(double)sum/scores.length);System.out.println(最高分max);// 4. 增强 for 循环System.out.print(成绩列表);for(intscore:scores){System.out.print(score );}System.out.println();// 5. 排序Arrays.sort(scores);System.out.println(排序后Arrays.toString(scores));// 6. 二分查找需先排序intindexArrays.binarySearch(scores,88);System.out.println(88 的索引index);// 7. 数组拷贝int[]copyArrays.copyOf(scores,scores.length2);System.out.println(拷贝后长度copy.length);// 二维数组交错数组 // 方法一规则矩阵int[][]matrixnewint[2][3];matrix[0][0]1;matrix[0][1]2;matrix[1][0]3;// 方法二动态指定内层长度交错数组int[][]raggednewint[2][];ragged[0]newint[2];// 第一行2个元素ragged[1]newint[5];// 第二行5个元素// 打印二维数组各行的长度for(inti0;iragged.length;i){System.out.println(第i行长度ragged[i].length);}// 静态初始化二维数组int[][]static2D{{1,2,3},{4,5},{6,7,8,9}};System.out.println(\n二维数组遍历结果);for(inti0;istatic2D.length;i){for(intj0;jstatic2D[i].length;j){System.out.print(static2D[i][j] );}System.out.println();}}}四、避坑要点错误/误区后果正确做法数组越界访问arr[arr.length]ArrayIndexOutOfBoundsException索引范围 0 到length-1多维数组中内层数组未初始化NullPointerException先new内层数组再使用int[] arr {1,2,3}; int[] arr2 arr;以为复制了数组arr2 只是引用改变 arr2 会影响 arr用Arrays.copyOf()或System.arraycopy()Arrays.asList()返回的 List 不能增删调用add/remove抛UnsupportedOperationException用new ArrayList(Arrays.asList(arr))混淆数组长度属性length和字符串方法length()编译错误数组用.length字符串用.length()创建二维数组时仅声明外层而未初始化内层就存取NullPointerException先为每一行分配独立的一维数组五、面试高频考点Q1数组和 ArrayList 的区别数组长度固定可存储基本类型效率高ArrayList 长度可变只能存储对象提供了丰富 API增删改查但底层也是数组。Q2如何将数组转换为 ListListString list Arrays.asList(arr);返回的是固定大小的Arrays.ArrayList不能增删。如需可变new ArrayList(Arrays.asList(arr))。Q3数组在内存中如何存储数组变量引用在栈中指向堆中的数组对象。数组对象包含长度信息以及连续存储的元素基本类型值或对象引用。Q4二维数组在内存中是如何存储的Java 中没有真正的二维数组二维数组本质是“数组的数组”——外层数组存储的是内层数组的引用地址内层每个一维数组在堆内存中独立存储。这也意味着每一行的长度可以不同。Q5什么是交错数组有什么优缺点交错数组指二维数组中每一行的长度可以不同。优点是内存灵活适合非表格形式的数据缺点是访问时需要两次寻址先找行数组引用再找元素速度略慢于规则矩阵且遍历时需额外注意。六、练习题编程手写冒泡排序对 int 数组排序。理解创建二维数组int[][] arr new int[3][];然后分别给每行分配不同长度如2、4、6并填充数据如用双层循环赋值。代码填空给定两个已排序的数组合并成一个新的有序数组归并思想。 你的学习进度当前第31篇 / 共44篇 ·第四阶段注解、反射、代理、日期第26~31篇✅ 已完成第1~30篇 正在学第31篇⏳ 待学习第32~44篇 完整目录 学习指南 | 订阅本专栏不错过每一篇 本专栏每篇都包含避坑表 面试高频考点 练习题。每天30分钟100天拿offer 下一篇文章预告《第32篇Java常用工具类Objects、Collections、Arrays深入》内容简介Objects 的 null 安全方法、Collections 的排序/反转/不可变集合、Arrays 的数组操作以及 Comparable 与 Comparator 排序。 学完这篇你将掌握 Java 工具箱里的瑞士军刀写出更简洁高效的代码。《Java 100 天进阶之路 | 从入门到上岗就业》每天一篇建议收藏 关注一起100天拿offer 点击关注我更新后第一时间收到推送