java矩阵运算需安全访问二维数组:行数用arr.length,列数须按每行校验arr[i].length;行优先遍历为默认推荐方式;列优先需先求最大列宽或动态判界;访问前必须检查行列边界及null。

Java 中矩阵运算依赖二维数组,而正确访问行与列是基础中的基础。关键不在“能不能访问”,而在“怎么访问才安全、通用、不越界”。尤其要注意:行数和列数的获取方式不同,且不规则数组下每行长度可能不一样。
行数和列数不能混用
二维数组的行数始终是 arr.length,这个值永远可靠。但列数不能直接写 arr[0].length 就完事——这只对规则数组(每行列数相同)成立。实际开发中常遇到不规则结构(比如三角形数组、稀疏表),此时第 0 行长度不代表其他行。
- 安全做法:访问某行第 j 列前,先确认 j
- 错误示范:
for (int j = 0; j 遍历所有行 → 第 2 行若比第 0 行短,就会 ArrayIndexOutOfBoundsException - 正确写法:
for (int j = 0; j ,每行用自己的长度校验
行优先遍历是默认且推荐的方式
按“先走完一行,再换下一行”的顺序访问,符合内存局部性,性能更好,也最贴近人类读表格的习惯。几乎所有标准操作(打印、求和、复制)都基于此。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 标准模板:
for (int i = 0; ifor (int j = 0; j// 处理 arr[i][j]}}
列优先遍历需特别注意边界
想先取第 0 列所有行、再取第 1 列……这种模式在转置、列统计等场景有用,但容易出错。核心难点在于:各行列数不同,某列可能在某些行根本不存在。
- 必须先确定“最大列宽”或逐列动态判断:对每个 j,检查 i 行是否存在第 j 列(即
j ) - 常见错误:把
arr[i].length写成arr[0].length当作统一列数,导致越界 - 安全写法示例:
int maxCols = 0;for (int i = 0; ifor (int j = 0; jfor (int i = 0; iif (j}}
访问前必须做索引校验
直接写 arr[2][3] 是危险的。生产代码中应封装带校验的访问方法,或至少手动检查边界。
- 校验顺序很重要:先判行
i >= 0 && i ,再判列 <code>j >= 0 && j - 避免 NPE:不规则数组中,某行可能为 null(如
int[][] a = new int[3][];后未给a[1]赋值),访问前要加arr[i] != null - 建议封装工具方法,例如:
safeGet(arr, i, j, defaultValue)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










