Java Arrays工具类详解
Java Arrays工具类完全指南
一、Arrays工具类概述
java.util.Arrays
是Java集合框架中专门用于操作数组的工具类,提供了一系列静态方法来简化数组操作。这些方法涵盖了数组的排序、搜索、比较、填充、复制等常见操作。
二、核心方法详解
1. 数组转换方法
asList(T… a)
将数组转换为固定大小的List(注意:返回的List不支持add/remove操作)
String[] arr = {"Java", "Python", "C++"};
List<String> list = Arrays.asList(arr);
// list.add("Go") 会抛出UnsupportedOperationException
toString() / deepToString()
数组转字符串表示(deepToString支持多维数组)
int[] nums = {1, 2, 3};
System.out.println(Arrays.toString(nums));
// 输出: [1, 2, 3]
int[][] matrix = {{1,2}, {3,4}};
System.out.println(Arrays.deepToString(matrix));
// 输出: [[1, 2], [3, 4]]
2. 排序与搜索
sort()
数组排序(支持基本类型和对象数组)
int[] numbers = {3, 1, 4, 2};
Arrays.sort(numbers); // [1, 2, 3, 4]
// 自定义排序
String[] langs = {"Java", "Python", "C"};
Arrays.sort(langs, (a,b) -> a.length() - b.length());
// 按字符串长度排序: ["C", "Java", "Python"]
binarySearch()
二分查找(数组必须已排序)
int[] sorted = {1, 3, 5, 7};
int index = Arrays.binarySearch(sorted, 5); // 2
int notFound = Arrays.binarySearch(sorted, 2); // 负值
3. 比较与填充
equals() / deepEquals()
比较数组内容(deepEquals支持多维数组)
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
boolean isEqual = Arrays.equals(a, b); // true
fill()
数组填充
char[] chars = new char[5];
Arrays.fill(chars, 'A'); // ['A', 'A', 'A', 'A', 'A']
// 部分填充
Arrays.fill(chars, 1, 3, 'B'); // ['A', 'B', 'B', 'A', 'A']
4. 复制与扩容
copyOf() / copyOfRange()
数组复制
int[] original = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(original, 3); // [1, 2, 3]
int[] rangeCopy = Arrays.copyOfRange(original, 1, 4); // [2, 3, 4]
setAll() / parallelSetAll()
使用生成函数初始化数组
int[] squares = new int[5];
Arrays.setAll(squares, i -> i * i); // [0, 1, 4, 9, 16]
5. 流操作(Java 8+)
stream()
将数组转为流
int[] nums = {1, 2, 3};
int sum = Arrays.stream(nums).sum(); // 6
long count = Arrays.stream(nums).filter(n -> n > 1).count(); // 2
三、多维数组处理
1. 深度操作方法
int[][] matrix = {{1,2}, {3,4}};
// 深度比较
boolean deepEqual = Arrays.deepEquals(matrix, new int[][]{{1,2},{3,4}}); // true
// 深度哈希码
int hash = Arrays.deepHashCode(matrix);
2. 多维数组排序
String[][] data = {{"Java","8"}, {"Python","3"}, {"C","11"}};
Arrays.sort(data, (a,b) -> a[0].compareTo(b[0]));
四、性能注意事项
-
排序性能:
- 基本类型使用双轴快速排序(O(n log n))
- 对象类型使用TimSort(稳定排序)
-
二分查找前提:
- 数组必须是有序的,否则结果不可预测
-
大数组处理:
- 考虑使用
parallelSort()
并行排序(Java 8+) - 对于超大数组,
parallelSetAll()
可能比setAll()
更快
- 考虑使用
五、实际应用案例
案例1:数组去重
int[] withDupes = {1, 2, 3, 2, 1};
int[] distinct = Arrays.stream(withDupes)
.distinct()
.toArray();
// 结果: [1, 2, 3]
案例2:数组转Map
String[] keys = {"id", "name"};
String[] values = {"1001", "Alice"};
Map<String, String> map = IntStream.range(0, keys.length)
.boxed()
.collect(Collectors.toMap(i -> keys[i], i -> values[i]));
案例3:数组分页
int[] data = new int[100];
Arrays.fill(data, 1);
int pageSize = 10;
IntStream.range(0, (data.length + pageSize - 1) / pageSize)
.mapToObj(i -> Arrays.copyOfRange(data, i * pageSize, Math.min(data.length, (i + 1) * pageSize)))
.forEach(page -> System.out.println(Arrays.toString(page)));
六、与其他工具类对比
功能 | Arrays | Collections |
---|---|---|
适用对象 | 数组 | 集合 |
排序方法 | sort() | sort() |
二分查找 | binarySearch() | binarySearch() |
填充 | fill() | n/a |
数组/集合转换 | asList() | n/a |
线程安全 | 不提供 | 提供同步包装方法 |
七、总结
Arrays工具类提供了数组操作的"瑞士军刀",主要特点包括:
- 全面性:覆盖数组操作的各个方面
- 高效性:底层使用优化算法实现
- 便利性:静态方法调用简单直接
最佳实践建议:
- 小数组直接使用
Arrays
方法 - 大数组考虑使用并行方法(如
parallelSort
) - 需要复杂操作时可结合Stream API使用
完整API文档参考:
Java 17 Arrays文档
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/119893.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!