Arrays
Arrays是Java标准库的数组工具类,提供数组的排序、查找、填充等功能。
概述
所在包
java.util.Arrays
核心特点
- 静态方法,无需创建对象
- 操作基本类型数组(int[]、char[]等)
- 操作引用类型数组(Object[]、String[]等)
排序方法
sort排序
Java
// 基本类型数组排序
int[] arr = {5, 2, 8, 1, 9};
Arrays.sort(arr);
// [1, 2, 5, 8, 9]
// 指定范围排序
int[] arr = {5, 2, 8, 1, 9};
Arrays.sort(arr, 1, 4); // 排序索引1到3
// [5, 1, 2, 8, 9]
// 引用类型数组排序
String[] strArr = {"c", "a", "b"};
Arrays.sort(strArr);
// ["a", "b", "c"]
// 自定义比较器
String[] strArr = {"c", "a", "b"};
Arrays.sort(strArr, Comparator.reverseOrder());
// ["c", "b", "a"]
查找方法
binarySearch二分查找
Java
int[] arr = {1, 3, 5, 7, 9};
// 必须先排序
int index = Arrays.binarySearch(arr, 5);
// 2(找到返回索引)
int index = Arrays.binarySearch(arr, 4);
// -2(找不到返回-(插入点)-1)
注意:binarySearch要求数组已排序,否则结果不确定。
填充与复制
fill填充
Java
int[] arr = new int[5];
Arrays.fill(arr, 10);
// [10, 10, 10, 10, 10]
// 指定范围填充
int[] arr = new int[5];
Arrays.fill(arr, 1, 4, 10);
// [0, 10, 10, 10, 0]
copyOf复制
Java
int[] arr = {1, 2, 3, 4, 5};
// 复制指定长度
int[] copy1 = Arrays.copyOf(arr, 3);
// [1, 2, 3]
int[] copy2 = Arrays.copyOf(arr, 10);
// [1, 2, 3, 4, 5, 0, 0, 0, 0, 0](超长补默认值)
// 指定范围复制
int[] copy3 = Arrays.copyOfRange(arr, 1, 4);
// [2, 3, 4](索引1到3)
转字符串
toString
Java
int[] arr = {1, 2, 3};
String str = Arrays.toString(arr);
// "[1, 2, 3]"
String[] strArr = {"a", "b", "c"};
String str = Arrays.toString(strArr);
// "[a, b, c]"
原生数组直接打印输出类似
[I@hashcode,toString方法输出内容。
deepToString多维数组
Java
int[][] arr = {{1, 2}, {3, 4}};
String str = Arrays.deepToString(arr);
// "[[1, 2], [3, 4]]"
比较数组
equals比较内容
Java
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = {1, 2, 4};
Arrays.equals(arr1, arr2); // true(内容相同)
Arrays.equals(arr1, arr3); // false
// 直接用==比较引用,不是内容
arr1 == arr2; // false(不同对象)
deepEquals多维数组比较
Java
int[][] arr1 = {{1, 2}, {3, 4}};
int[][] arr2 = {{1, 2}, {3, 4}};
Arrays.deepEquals(arr1, arr2); // true
转集合
asList转List
Java
String[] arr = {"a", "b", "c"};
List<String> list = Arrays.asList(arr);
// [a, b, c]
// 直接传入元素
List<String> list = Arrays.asList("a", "b", "c");
重要:asList返回固定大小List,不能add/remove,否则抛UnsupportedOperationException。
Java
List<String> list = Arrays.asList("a", "b", "c");
list.add("d"); // UnsupportedOperationException
// 需要可变List
List<String> mutableList = new ArrayList<>(Arrays.asList("a", "b", "c"));
mutableList.add("d"); // 正常
流操作
stream转Stream(Java 8+)
Java
int[] arr = {1, 2, 3, 4, 5};
// 转IntStream
int sum = Arrays.stream(arr).sum(); // 15
int max = Arrays.stream(arr).max().getAsInt(); // 5
// 过滤
int[] filtered = Arrays.stream(arr)
.filter(x -> x > 2)
.toArray();
// [3, 4, 5]
并行排序
parallelSort并行排序
Java
int[] arr = {5, 2, 8, 1, 9, 3, 7, 4, 6};
Arrays.parallelSort(arr); // 并行排序,大数据量更快
// [1, 2, 3, 4, 5, 6, 7, 8, 9]
parallelSort利用多线程并行排序,大数据量(上万)效率更高。
要点总结
- Arrays是java.util包的数组工具类
- sort排序,parallelSort并行排序
- binarySearch二分查找(需先排序)
- fill填充,copyOf/copyOfRange复制
- toString转字符串,deepToString多维数组
- equals比较内容,deepEquals多维比较
- asList转List(固定大小不可变)
- stream转Stream支持流操作
- 大数组排序推荐parallelSort
📝 发现内容有误?点击此处直接编辑