Arrays工具类提供静态方法简化一维数组操作:排序需区分基本/引用类型并注意Comparator;binarySearch要求预排序;asList不支持基本类型直接转换;toString/deepToString用于打印;fill、copyOf、equals等提升开发效率。

Arrays 工具类是 Java 中处理一维数组最直接、最常用的辅助工具,所有方法都是静态的,无需实例化。它不操作多维数组本身(deepToString 和 deepEquals 是例外),也不改变数组类型,但能显著简化排序、查找、打印、比较和集合转换等高频操作。
排序:按需选择 sort 方法
排序必须区分基本类型和引用类型:
- 基本类型数组(如
int[]、double[])可直接调用Arrays.sort(arr),底层使用双轴快排,高效且稳定; - 引用类型数组(如
String[]、Person[])要求元素实现Comparable,否则运行时报ClassCastException; - 若需自定义顺序(比如字符串按长度排、对象按 ID 降序),传入
Comparator:Arrays.sort(strArray, (a, b) -> a.length() - b.length()); - 只对子区间排序时,用重载方法
Arrays.sort(arr, fromIndex, toIndex),注意是左闭右开区间。
搜索:binarySearch 必须配合排序使用
Arrays.binarySearch() 是唯一内置查找方法,基于二分法,效率高但有硬性前提:
- 调用前必须确保数组已升序排列,否则结果不可预测——不报错,但返回值无意义;
- 返回值 ≥ 0 表示找到元素的索引;
- 返回值为负数时,含义是
-(插入点) - 1,即该元素应在的位置(维持有序),可用于定位“大于等于目标的第一个位置”; - 子区间查找和自定义比较器查找也存在对应重载,但比较逻辑必须与排序时一致。
转换:小心 asList 和基本类型陷阱
数组转集合最常用 Arrays.asList(),但有几个关键限制:
- 返回的是固定大小的
List,底层仍指向原数组,调用add()、remove()会抛UnsupportedOperationException; - 对基本类型数组(如
int[])直接传入asList,不会自动装箱,而是把整个数组当作单个元素,得到的是List<int></int>,不是你想要的List<integer></integer>; - 正确转基本类型数组为
List<integer></integer>的方式是:Arrays.stream(intArr).boxed().collect(Collectors.toList()); - 调试打印推荐用
Arrays.toString()(一维)或Arrays.deepToString()(多维),避免直接System.out.println(arr)输出哈希地址。
其他实用操作:填充、复制与安全比较
这些方法让数组初始化和校验更简洁可靠:
-
Arrays.fill(arr, value)批量赋值,支持指定范围fill(arr, from, to, value); -
Arrays.copyOf(arr, newLength)创建新数组并复制,长度不足则截断,超出则补默认值(如0、null); -
Arrays.copyOfRange(arr, from, to)更精准地截取子数组(同样左闭右开); -
Arrays.equals(a, b)安全比较两个数组内容是否相等(逐元素比,自动处理null),比a == b或Arrays.toString(a).equals(...)更准确; -
Arrays.deepEquals()用于嵌套数组(如Object[][])的内容比较。











