Arrays类是Java专门用于操作数组的工具类,所有方法都是静态方法 (直接通过Arrays.方法名调用),覆盖了排序、比较、填充、复制、查找、转字符串等核心场景。
一、核心常用方法详解
1. 排序相关:sort()
功能 :对数组进行升序排序,支持所有基本类型数组和对象数组(对象需实现Comparable接口,或传入自定义Comparator)。
重载版本:
- 排序整个数组:
sort(数组) - 排序指定范围:
sort(数组, 起始索引, 结束索引)(左闭右开,如sort(arr, 0, 3)排序索引0、1、2的元素)
示例代码:
java
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
// 1. 基本类型数组排序
int[] intArr = {3, 1, 4, 2};
Arrays.sort(intArr);
System.out.println("排序后int数组:" + Arrays.toString(intArr)); // [1, 2, 3, 4]
// 2. 指定范围排序
String[] strArr = {"apple", "banana", "cherry", "date"};
Arrays.sort(strArr, 1, 3); // 只排序索引1、2的元素
System.out.println("指定范围排序后:" + Arrays.toString(strArr)); // [apple, cherry, banana, date]
// 3. 自定义对象排序(需实现Comparable)
Person[] persons = {new Person("张三", 25), new Person("李四", 20)};
Arrays.sort(persons); // 按年龄升序
System.out.println("对象数组排序:" + Arrays.toString(persons));
}
// 自定义Person类,实现Comparable接口
static class Person implements Comparable<Person> {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person o) {
return this.age - o.age; // 按年龄升序
}
@Override
public String toString() {
return name + "(" + age + ")";
}
}
}
2. 数组比较:equals() / deepEquals()
功能:判断两个数组的内容是否完全一致(长度+对应位置元素都相同)。
equals():仅支持一维数组比较;deepEquals():支持多维数组 比较(如int[][])。
示例代码:
java
// 1. 一维数组比较
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = {1, 3, 2};
System.out.println(Arrays.equals(arr1, arr2)); // true
System.out.println(Arrays.equals(arr1, arr3)); // false
// 2. 多维数组比较(必须用deepEquals)
int[][] multiArr1 = {{1,2}, {3,4}};
int[][] multiArr2 = {{1,2}, {3,4}};
System.out.println(Arrays.equals(multiArr1, multiArr2)); // false(equals比较的是数组引用)
System.out.println(Arrays.deepEquals(multiArr1, multiArr2)); // true(deepEquals比较内容)
3. 数组填充:fill()
功能 :将指定值填充到数组的全部/指定范围元素中。
重载版本:
- 填充全部:
fill(数组, 填充值) - 填充指定范围:
fill(数组, 起始索引, 结束索引, 填充值)
示例代码:
java
int[] fillArr = new int[5];
Arrays.fill(fillArr, 8); // 全部填充8
System.out.println("全部填充:" + Arrays.toString(fillArr)); // [8, 8, 8, 8, 8]
Arrays.fill(fillArr, 1, 3, 9); // 索引1、2填充9
System.out.println("指定范围填充:" + Arrays.toString(fillArr)); // [8, 9, 9, 8, 8]
4. 数组转字符串:toString() / deepToString()
功能:将数组转为易读的字符串(避免直接打印数组出现内存地址)。
toString():一维数组专用;deepToString():多维数组专用。
示例代码:
java
int[] simpleArr = {1,2,3};
System.out.println(Arrays.toString(simpleArr)); // [1, 2, 3]
int[][] multiArr = {{1,2}, {3,4}};
System.out.println(Arrays.deepToString(multiArr)); // [[1, 2], [3, 4]]
5. 数组复制:copyOf() / copyOfRange()
功能:复制数组(比手动循环复制更高效)。
copyOf(原数组, 新长度):复制整个数组,新长度>原长度则补默认值(int补0,String补null),新长度<原长度则截断;copyOfRange(原数组, 起始索引, 结束索引):复制指定范围的元素(左闭右开)。
示例代码:
java
int[] srcArr = {1,2,3,4,5};
// 1. copyOf:新长度6(补0)
int[] copy1 = Arrays.copyOf(srcArr, 6);
System.out.println("copyOf补0:" + Arrays.toString(copy1)); // [1, 2, 3, 4, 5, 0]
// 2. copyOfRange:复制索引1到4(含1,不含4)
int[] copy2 = Arrays.copyOfRange(srcArr, 1, 4);
System.out.println("copyOfRange:" + Arrays.toString(copy2)); // [2, 3, 4]
6. 二分查找:binarySearch()
功能 :在已排序 的数组中快速查找指定元素,返回元素索引;若找不到,返回 -(插入点) - 1(插入点是元素应该插入的位置)。
注意:数组必须先排序,否则结果不可靠!
示例代码:
java
int[] searchArr = {1,2,3,4,5};
// 查找存在的元素
int index1 = Arrays.binarySearch(searchArr, 3);
System.out.println("查找3的索引:" + index1); // 2
// 查找不存在的元素(应该插入到索引2的位置)
int index2 = Arrays.binarySearch(searchArr, 6);
System.out.println("查找6的结果:" + index2); // -6(-(5) -1 = -6,插入点是5)
7. 数组转List:asList()
功能 :将数组转为List集合(注意:返回的是Arrays.ArrayList,不是java.util.ArrayList,不可添加/删除元素,仅可修改)。
示例代码:
java
String[] listArr = {"a", "b", "c"};
java.util.List<String> list = Arrays.asList(listArr);
System.out.println("数组转List:" + list); // [a, b, c]
// 注意:不能添加/删除(会抛UnsupportedOperationException)
// list.add("d"); // 报错
list.set(0, "aa"); // 可以修改元素
System.out.println("修改后List:" + list); // [aa, b, c]
// 若需可操作的ArrayList,需手动转换:
java.util.List<String> arrayList = new java.util.ArrayList<>(Arrays.asList(listArr));
arrayList.add("d"); // 正常执行
二、其他常用方法(补充)
| 方法 | 功能 |
|---|---|
hashCode(数组) |
返回数组内容的哈希值(一维数组) |
deepHashCode(数组) |
返回多维数组内容的哈希值 |
setAll(数组, 函数) |
按自定义规则生成数组元素(Java 8+) |
parallelSort(数组) |
并行排序(适合大数据量,利用多线程) |
总结
Arrays类所有方法均为静态方法,需通过Arrays.方法名调用;- 区分一维/多维数组方法:
equals/toString仅适用于一维,deepEquals/deepToString适用于多维; binarySearch和parallelSort依赖数组有序,使用前务必确认数组已排序;asList返回的List不可扩容/缩容,需转为java.util.ArrayList才能自由增删元素。
这些方法基本覆盖了日常开发中数组操作的绝大部分场景,熟练使用能大幅提升数组处理的效率。