Java中的Arrays类详解

java.util.Arrays是Java中一个非常实用的工具类,提供了各种操作数组的静态方法。下面我将详细介绍Arrays类的主要功能和使用方法。

1. 数组排序

Arrays类提供了多种排序方法:

基本类型数组排序

int[] numbers = {5, 3, 9, 1, 7};
Arrays.sort(numbers); // 升序排序
// 结果: [1, 3, 5, 7, 9]

// 指定范围排序
int[] partial = {5, 3, 9, 1, 7};
Arrays.sort(partial, 1, 4); // 只排序索引1到3(不包括4)的元素
// 结果: [5, 1, 3, 9, 7]

对象数组排序

对象数组排序要求元素实现Comparable接口或提供Comparator

String[] names = {"John", "Alice", "Bob"};
Arrays.sort(names);
// 结果: ["Alice", "Bob", "John"]

// 使用自定义比较器
Arrays.sort(names, (a, b) -> b.compareTo(a)); // 降序排序
// 结果: ["John", "Bob", "Alice"]

并行排序(Java 8+)

对于大型数组,可以使用并行排序提高性能:

int[] largeArray = new int[1000000];
Arrays.parallelSort(largeArray);

2. 数组搜索

Arrays提供了二分查找方法,要求数组必须是有序的:

int[] numbers = {1, 3, 5, 7, 9};
int index = Arrays.binarySearch(numbers, 5); // 返回2
int notFound = Arrays.binarySearch(numbers, 4); // 返回-3 (插入点为2,返回-2-1)

3. 数组比较

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
int[] c = {1, 2, 4};

boolean equalAB = Arrays.equals(a, b); // true
boolean equalAC = Arrays.equals(a, c); // false

对于多维数组,使用deepEquals

int[][] arr1 = {{1, 2}, {3, 4}};
int[][] arr2 = {{1, 2}, {3, 4}};
boolean deepEqual = Arrays.deepEquals(arr1, arr2); // true

4. 数组填充

int[] numbers = new int[5];
Arrays.fill(numbers, 10); // 全部填充为10
// 结果: [10, 10, 10, 10, 10]

// 部分填充
Arrays.fill(numbers, 1, 3, 20); // 填充索引1到2(不包括3)
// 结果: [10, 20, 20, 10, 10]

5. 数组复制

int[] original = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOf(original, 3); // 复制前3个元素
// 结果: [1, 2, 3]

int[] rangeCopy = Arrays.copyOfRange(original, 1, 4); // 复制索引1到3(不包括4)
// 结果: [2, 3, 4]

6. 数组转字符串

int[] numbers = {1, 2, 3};
String str = Arrays.toString(numbers); // "[1, 2, 3]"

// 多维数组使用deepToString
int[][] matrix = {{1, 2}, {3, 4}};
String matrixStr = Arrays.deepToString(matrix); // "[[1, 2], [3, 4]]"

7. Java 8新增功能

流操作

int[] numbers = {1, 2, 3, 4, 5};
Arrays.stream(numbers)
      .filter(n -> n % 2 == 0)
      .forEach(System.out::println); // 输出2和4

parallelPrefix (累积计算)

int[] numbers = {1, 2, 3, 4};
Arrays.parallelPrefix(numbers, (a, b) -> a + b);
// 结果: [1, 3, 6, 10] (累积和)

8. 数组比较器

String[] names = {"John", "Alice", "Bob"};
Arrays.sort(names, Arrays.compare(String::compareTo));

9. 数组不匹配查找

Java 9新增方法,查找两个数组第一个不匹配的索引:

int[] a = {1, 2, 3, 4};
int[] b = {1, 2, 4, 4};
int mismatch = Arrays.mismatch(a, b); // 返回2

10. 注意事项

  1. Arrays类所有方法都是静态的,不需要创建实例
  2. 排序和搜索方法对基本类型和对象类型有重载版本
  3. 并行操作在大数据集上性能更好,但小数组可能反而更慢
  4. 修改方法(如sort)会直接修改原数组,而不是返回新数组

Arrays类极大简化了Java中对数组的操作,是日常开发中非常实用的工具类。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容