在 Java 中,数组是常用的数据结构,但直接操作数组往往需要编写大量重复代码。java.util.Arrays工具类封装了一系列静态方法,可快速实现数组的排序、查找、复制等操作,极大简化开发。本文结合实例,详细讲解Arrays类的核心方法及使用场景。
一、Arrays 核心方法详解
1. toString(数组):数组转字符串
功能:将数组元素拼接为[元素1, 元素2, ...]格式的字符串,方便打印输出。
示例:
int[] arr = {1, 3, 5, 7};
System.out.println(Arrays.toString(arr)); // 输出:[1, 3, 5, 7]
注意:支持所有基本数据类型和对象数组(对象需重写toString()方法)。
2. binarySearch(数组, 目标元素):二分查找
功能:在升序数组中查找目标元素的索引,效率远高于顺序查找。
返回值:
- 找到元素:返回对应索引;
- 未找到元素:返回
-(插入点 + 1)(插入点为元素应插入的位置)。
示例:int[] arr = {2, 4, 6, 8}; int index = Arrays.binarySearch(arr, 6); System.out.println(index); // 输出:2(6在索引2位置) int notFound = Arrays.binarySearch(arr, 5); System.out.println(notFound); // 输出:-3(5应插入索引2,故-(2+1) = -3)
注意:数组必须是升序的,否则结果不可靠。
3. 数组复制:copyOf()与copyOfRange()
-
copyOf(原数组, 新长度):从原数组 0 索引开始复制,新数组长度由参数指定。- 若新长度 > 原数组长度:多余位置用默认值填充(如 int 数组补 0,对象数组补 null);
- 若新长度 < 原数组长度:截断原数组。
-
copyOfRange(原数组, 开始索引, 结束索引):复制原数组中[开始索引, 结束索引)范围的元素(左闭右开)。
示例:
int[] arr = {10, 20, 30, 40};
// copyOf:复制前3个元素
int[] copy1 = Arrays.copyOf(arr, 3);
System.out.println(Arrays.toString(copy1)); // [10, 20, 30]
// copyOfRange:复制索引1到3(不含3)的元素
int[] copy2 = Arrays.copyOfRange(arr, 1, 3);
System.out.println(Arrays.toString(copy2)); // [20, 30]
4. fill(数组, 元素):填充数组
功能:将数组所有元素替换为指定值,常用于初始化数组。
示例:
int[] arr = new int[5];
Arrays.fill(arr, 9); // 填充所有元素为9
System.out.println(Arrays.toString(arr)); // [9, 9, 9, 9, 9]
5. 排序:sort()与定制排序
-
sort(数组):对数组进行自然排序(升序),支持基本数据类型和实现Comparable接口的对象数组。 -
sort(数组, 比较器):通过Comparator指定排序规则,支持自定义排序(如降序)。
示例:
// 基本类型升序排序
int[] arr1 = {3, 1, 4, 2};
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1)); // [1, 2, 3, 4]
// 对象数组定制排序(降序)
Integer[] arr2 = {3, 1, 4, 2};
Arrays.sort(arr2, (a, b) -> b - a); // 用Lambda表达式指定降序
System.out.println(Arrays.toString(arr2)); // [4, 3, 2, 1]
二、使用注意事项
- 线程安全性:
Arrays类的方法均为静态方法,且未同步,多线程环境下需手动保证线程安全。 - 对象数组操作:对对象数组使用
sort()时,若未实现Comparable或未指定Comparator,会抛出ClassCastException。 - 性能考量:
sort()对基本类型采用双轴快速排序,对对象数组采用 TimSort(归并排序变种),效率较高,无需重复造轮子。
总结
Arrays工具类涵盖了日常开发中常用的数组处理场景。掌握toString()、binarySearch()、copyOf()、sort()等方法,能显著减少重复代码,提升开发效率。实际使用时需注意数组的有序性、范围边界及数据类型适配,让数组操作更简洁高效。
736

被折叠的 条评论
为什么被折叠?



