arrays工具类是java数组操作的“标准答案”,所有方法均为静态,直接调用无需实例化,补足原生数组在打印、比较、查找、排序等方面的短板,并提供流式处理与安全备份等进阶能力。

Arrays工具类是Java数组操作的“标准答案”,所有方法都是静态的,直接用Arrays.xxx()调用,不用new、不实例化。它补足了原生数组能力短板——比如不能直接打印内容、不能安全比较、不能二分查找,全靠它兜底。
打印和转换:看清数组真面目
直接System.out.println(arr)只输出哈希值(如[I@1f28a0c),毫无调试价值。必须用专用方法:
-
Arrays.toString(arr):一维数组专用,int[]{1, 2, 3}→[1, 2, 3] -
Arrays.deepToString(arr):多维数组必备,int[][]{{1,2},{3,4}}→[[1, 2], [3, 4]] -
Arrays.asList(arr):仅适用于对象数组(如String[]、Integer[]),返回固定大小的List;对int[]会误转成含单个元素的列表(因泛型擦除),慎用
排序与查找:快而准,但有硬前提
排序不是万能钥匙,查找更不是“随便搜”:
-
Arrays.sort(arr):基本类型走双轴快排,对象类型走TimSort;支持局部排序sort(arr, from, to)(左闭右开) -
Arrays.parallelSort(arr):大数据量(通常百万级)时性能更优,自动并行化 -
Arrays.binarySearch(arr, key):必须在已升序排序的数组上调用,否则结果无效;返回≥0为索引,负数为-(插入点 + 1),例如查6在[1,3,5,7]中,插入点是3,返回-4
填充、复制与比较:细节决定是否出错
这些操作看着简单,越界、截断、默认值等边界情况容易踩坑:
-
Arrays.fill(arr, val)填全部;fill(arr, from, to, val)填子范围(同样左闭右开) -
Arrays.copyOf(arr, newLen):新长度>原长 → 补默认值(int补0,Object补null);新长度<原长 → 截断 -
Arrays.copyOfRange(arr, from, to):范围也是[from, to),越界直接抛ArrayIndexOutOfBoundsException -
Arrays.equals(a, b)比一维数组内容(长度+每个元素);deepEquals()才能正确比嵌套数组
进阶技巧:流式处理与不可变封装
现代Java开发中,数组常需接入函数式链条或规避修改风险:
-
Arrays.stream(arr):返回IntStream、Stream<t></t>等,可接filter、map、collect等操作 -
Arrays.asList(arr)返回的List不可add/remove,但可set;若需真正可变List,应写new ArrayList(Arrays.asList(arr)) - 敏感操作前建议备份:
int[] backup = arr.clone();或int[] backup = Arrays.copyOf(arr, arr.length);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











