arrays.aslist() 返回固定长度列表,不支持增删改;需可变列表应包装为 new arraylist(arrays.aslist(arr));基本类型数组需先转包装类型。
如何用 Arrays.asList() 安全转换数组为列表
Arrays.asList() 看似方便,但返回的是固定长度的 List 实现(Arrays.ArrayList),不支持 add()、remove()、clear() 等结构性修改操作,调用会直接抛 UnsupportedOperationException。
- 适用场景:仅需遍历、查找、或作为参数传给接受
Collection的方法(如Collections.frequency()) - 若需可变列表,必须显式包装:
new ArrayList(Arrays.asList(arr)) - 对基本类型数组(如
int[])无效——它会把整个数组当做一个元素,结果是List<int></int>;必须先转成包装类型数组(Integer[])再调用
Arrays.equals() 和 Arrays.deepEquals() 的区别在哪
普通 Arrays.equals(a, b) 对一维数组逐元素比较,对二维及以上数组,只比较子数组引用是否相同;而 Arrays.deepEquals(a, b) 会递归深入每一层,真正做“内容相等”判断。
- 错误用法:
int[][] a = {{1}}; int[][] b = {{1}}; Arrays.equals(a, b)返回false(因两个子数组是不同对象) - 正确做法:用
Arrays.deepEquals(a, b),返回true - 注意:
deepEquals()能处理null和混合维度(如Object[]中混有String和int[][]),但性能略低,非必要不滥用
排序和二分查找必须先保证数组有序吗
Arrays.sort() 自己负责排序,无需前置条件;但 Arrays.binarySearch() 要求目标数组**已升序排列**,否则结果不可预测(不是简单“找不到”,而是可能返回负数以外的错误索引)。