Java的Arrays工具类提供静态方法高效操作数组,涵盖打印(toString/deepToString)、转换(asList)、排序(sort/parallelSort)、查找(binarySearch)、填充(fill)、复制(copyOf/copyOfRange)、比较(equals/deepEquals)及流处理(stream)等核心功能。

Java 的 Arrays 工具类是操作数组最直接、最常用的辅助工具,所有方法均为静态方法,无需实例化,调用简洁高效。它解决了原生数组缺乏内容比较、便捷打印、排序查找等能力的痛点。
数组打印与转换:避免地址输出,看清真实内容
直接打印数组(如 System.out.println(arr))会输出类似 [I@1b6d3586 的哈希地址,毫无可读性。应使用:
-
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;注意不支持add/remove,且对基本类型数组(如int[])会误转为含单个元素的列表(因泛型擦除)
排序与查找:高效稳定,但有前提条件
Arrays.sort() 是最常用方法,支持多种场景:
- 基本类型数组:默认升序,使用双轴快排(如
int[]、double[]) - 对象数组:需实现
Comparable,或传入Comparator(如按字符串长度:(a,b) -> a.length()-b.length()) - 局部排序:
sort(arr, from, to)只对索引[from, to)范围排序(左闭右开) - 并行排序:大数据量时可用
Arrays.parallelSort()提升性能
二分查找 Arrays.binarySearch() 必须在已排序数组上调用,否则结果不可靠。返回值逻辑明确:
立即学习“Java免费学习笔记(深入)”;
- 找到:返回对应索引(≥0)
- 未找到:返回
-(插入点 + 1),例如在[1,3,5,7]中查6,应插在索引 3,返回-4
填充、复制与比较:安全、精准、不踩坑
这些方法看似简单,但细节决定正确性:
-
Arrays.fill(arr, val)填充整个数组;fill(arr, from, to, val)填充子范围(同样左闭右开) -
Arrays.copyOf(arr, newLen)创建新数组并复制:若newLen > arr.length,多余位置补默认值(0、null、false);若更小,则截断 -
Arrays.copyOfRange(arr, from, to)复制子序列,索引范围也是[from, to),越界会抛ArrayIndexOutOfBoundsException -
Arrays.equals(a, b)比较两个一维数组是否“内容相等”(长度、类型、每个元素均相同);deepEquals()支持嵌套数组逐层比对
其他实用技巧:提升开发体验
几个高频但易被忽略的能力:
- 数组转流:
Arrays.stream(arr)可无缝接入 Stream API,做 filter/map/reduce 等操作 - 哈希计算:
Arrays.hashCode(arr)和Arrays.deepHashCode(arr)分别生成一维/多维数组的内容哈希值,适合用作缓存键或快速判重 - 批量赋值:
Arrays.setAll(arr, i -> i * 2)可基于索引生成值,比循环更函数式;parallelSetAll()支持并发初始化

















