Java中Arrays静态方法

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(数组) 并行排序(适合大数据量,利用多线程)

总结

  1. Arrays类所有方法均为静态方法,需通过Arrays.方法名调用;
  2. 区分一维/多维数组方法:equals/toString仅适用于一维,deepEquals/deepToString适用于多维;
  3. binarySearchparallelSort依赖数组有序,使用前务必确认数组已排序;
  4. asList返回的List不可扩容/缩容,需转为java.util.ArrayList才能自由增删元素。

这些方法基本覆盖了日常开发中数组操作的绝大部分场景,熟练使用能大幅提升数组处理的效率。

相关推荐
未既4 小时前
防火墙端口以及docker访问规则链配置允许特定ip访问
java·tcp/ip·docker
Renhao-Wan4 小时前
Java算法实践(二):堆与PriorityQueue实战
java·数据结构·算法
手握风云-4 小时前
JavaEE 进阶第十八期:MyBatis,查询请求的生命周期全景图(三)
java·开发语言·java-ee
时艰.4 小时前
海量数据高并发读写方案设计
java
.小小陈.4 小时前
Python基础语法详解4:函数、列表与元组全解析
开发语言·c++·python·学习
IT猿手4 小时前
多目标鲸鱼优化算法(MOWOA)求解46个多目标函数及一个工程应用,包含四种评价指标,MATLAB代码
开发语言·算法·matlab
wjs20244 小时前
Ruby 条件判断
开发语言
leo_2324 小时前
语言、开发语言&程序设计语言--SMP(软件制作平台)语言基础知识之六十一
开发语言·开发工具·企业信息化·smp(软件制作平台)·应用系统·eom(企业经营模型)
古城小栈4 小时前
Rust中 引用类型 VS 裸指针
开发语言·后端·rust