在Java开发中,数组是最基础的数据结构之一,而java.util包下的Arrays类专门为数组操作提供了一系列静态方法,覆盖了排序、查找、拷贝、比较等常见需求,避免了开发者重复编写基础逻辑。掌握Arrays类的常用方法,能极大提升数组相关操作的编码效率。

Arrays类常用方法分类说明
1. 数组排序方法
Arrays类提供了多种排序方法,最常用的是sort()方法,支持对不同类型的数组进行排序,默认采用升序排列。
对于基本类型数组,sort()方法会直接修改原数组,不需要返回新的数组。如果是引用类型数组,需要保证元素实现了Comparable接口,或者传入自定义的Comparator比较器。
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
// 基本类型数组排序
int[] intArr = {3, 1, 4, 2, 5};
Arrays.sort(intArr);
System.out.println("排序后的int数组:" + Arrays.toString(intArr)); // 输出[1, 2, 3, 4, 5]
// 引用类型数组排序,自定义比较器
String[] strArr = {"apple", "banana", "cat", "dog"};
// 按字符串长度降序排序
Arrays.sort(strArr, (a, b) -> b.length() - a.length());
System.out.println("按长度排序后的字符串数组:" + Arrays.toString(strArr)); // 输出[banana, apple, cat, dog]
}
}
2. 数组查找方法
binarySearch()是Arrays类提供的二分查找方法,要求数组必须是升序排列的,否则查找结果会不准确。该方法返回目标元素的索引,如果不存在则返回负数。
import java.util.Arrays;
public class SearchDemo {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9};
// 查找存在的元素
int index1 = Arrays.binarySearch(arr, 5);
System.out.println("元素5的索引:" + index1); // 输出2
// 查找不存在的元素
int index2 = Arrays.binarySearch(arr, 4);
System.out.println("元素4的索引:" + index2); // 输出-3,表示如果插入4应该放在索引2的位置
}
}
3. 数组拷贝方法
Arrays类提供了copyOf()和copyOfRange()两个拷贝方法,前者拷贝整个数组,后者拷贝数组的指定区间。
copyOf()方法会创建一个新的数组,长度为传入的参数长度,如果原数组长度小于新长度,多余的位置会用默认值填充;copyOfRange()的区间是左闭右开的,即包含起始索引,不包含结束索引。
import java.util.Arrays;
public class CopyDemo {
public static void main(String[] args) {
int[] original = {1, 2, 3, 4, 5};
// 拷贝整个数组,长度扩展为8
int[] copy1 = Arrays.copyOf(original, 8);
System.out.println("扩展拷贝结果:" + Arrays.toString(copy1)); // 输出[1, 2, 3, 4, 5, 0, 0, 0]
// 拷贝指定区间,从索引1到索引3(不包含3)
int[] copy2 = Arrays.copyOfRange(original, 1, 3);
System.out.println("区间拷贝结果:" + Arrays.toString(copy2)); // 输出[2, 3]
}
}
4. 数组比较与填充方法
equals()方法用于比较两个数组是否相等,要求两个数组的长度相同,且对应位置的元素都相等才会返回true。fill()方法用于将数组的所有元素或者指定区间的元素填充为同一个值。
import java.util.Arrays;
public class OtherDemo {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = {1, 2, 4};
// 数组比较
System.out.println("arr1和arr2是否相等:" + Arrays.equals(arr1, arr2)); // 输出true
System.out.println("arr1和arr3是否相等:" + Arrays.equals(arr1, arr3)); // 输出false
// 数组填充
int[] fillArr = new int[5];
Arrays.fill(fillArr, 10);
System.out.println("全部填充结果:" + Arrays.toString(fillArr)); // 输出[10, 10, 10, 10, 10]
// 区间填充,从索引1到索引3填充为20
Arrays.fill(fillArr, 1, 3, 20);
System.out.println("区间填充结果:" + Arrays.toString(fillArr)); // 输出[10, 20, 20, 10, 10]
}
}
5. 数组转字符串方法
toString()方法可以将数组转换为格式化的字符串,方便打印查看数组内容。如果是多维数组,需要使用deepToString()方法才能正确展示所有层级的元素。
import java.util.Arrays;
public class ToStringDemo {
public static void main(String[] args) {
int[] singleArr = {1, 2, 3};
System.out.println("一维数组转字符串:" + Arrays.toString(singleArr)); // 输出[1, 2, 3]
int[][] multiArr = {{1, 2}, {3, 4}};
// 直接用toString会输出对象地址
System.out.println("直接转多维数组:" + Arrays.toString(multiArr));
// 使用deepToString才能正确展示
System.out.println("多维数组转字符串:" + Arrays.deepToString(multiArr)); // 输出[[1, 2], [3, 4]]
}
}
注意事项
- 使用
binarySearch()前必须保证数组是升序排列的,否则结果不可靠。 sort()方法会直接修改原数组,如果需要保留原数组,需要先拷贝再排序。- 操作数组区间的方法(如
copyOfRange()、fill()的区间重载)要注意索引越界问题,起始索引不能小于0,结束索引不能大于数组长度。 - 对于引用类型数组的排序,如果没有实现
Comparable接口也没有传入比较器,会抛出ClassCastException。