java Arrays 详解

Java Arrays 类详解

Arrays 是 Java 中一个专门用于操作数组的工具类,位于 java.util 包中。它提供了多种用于数组操作的方法,例如排序、搜索、填充、比较、转换等。


1. 常用方法分类

1.1 排序
方法 描述
Arrays.sort(array) 对数组进行升序排序(适用于基本类型和对象类型)。
Arrays.sort(array, Comparator) 按照指定的比较器对数组进行排序(适用于对象数组)。
Arrays.parallelSort(array) 使用多线程对数组进行排序(适用于基本类型和对象类型)。

示例

java 复制代码
import java.util.Arrays;

public class ArraysSortExample {
    public static void main(String[] args) {
        int[] nums = {5, 3, 8, 1, 2};
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums)); // [1, 2, 3, 5, 8]

        String[] names = {"Tom", "Alice", "Bob"};
        Arrays.sort(names);
        System.out.println(Arrays.toString(names)); // [Alice, Bob, Tom]

        Arrays.sort(names, (a, b) -> b.compareTo(a)); // 按字母倒序
        System.out.println(Arrays.toString(names)); // [Tom, Bob, Alice]
    }
}

1.2 搜索
方法 描述
Arrays.binarySearch(array, key) 在排序数组中使用二分搜索查找 key,返回索引。
  • 数组必须先排序,才能使用 binarySearch
  • 如果找到元素,返回其索引;否则,返回负值(插入点的负索引减 1)。

示例

java 复制代码
import java.util.Arrays;

public class ArraysSearchExample {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 5, 8};
        System.out.println(Arrays.binarySearch(nums, 3)); // 2
        System.out.println(Arrays.binarySearch(nums, 4)); // -4(插入点为索引 3)
    }
}

1.3 复制
方法 描述
Arrays.copyOf(array, newLength) 复制数组到一个新数组,指定长度。
Arrays.copyOfRange(array, from, to) 复制数组的指定范围 [from, to)

示例

java 复制代码
import java.util.Arrays;

public class ArraysCopyExample {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        int[] copy = Arrays.copyOf(nums, 3); // 复制前 3 个元素
        System.out.println(Arrays.toString(copy)); // [1, 2, 3]

        int[] rangeCopy = Arrays.copyOfRange(nums, 2, 4); // 复制索引 2 到 4 的元素
        System.out.println(Arrays.toString(rangeCopy)); // [3, 4]
    }
}

1.4 填充
方法 描述
Arrays.fill(array, value) value 填充整个数组。
Arrays.fill(array, from, to, value) value 填充数组的 [from, to) 范围。

示例

java 复制代码
import java.util.Arrays;

public class ArraysFillExample {
    public static void main(String[] args) {
        int[] nums = new int[5];
        Arrays.fill(nums, 10); // 用 10 填充整个数组
        System.out.println(Arrays.toString(nums)); // [10, 10, 10, 10, 10]

        Arrays.fill(nums, 1, 4, 20); // 填充索引 1 到 4
        System.out.println(Arrays.toString(nums)); // [10, 20, 20, 20, 10]
    }
}

1.5 比较
方法 描述
Arrays.equals(array1, array2) 比较两个数组是否相等(包括顺序和内容)。
Arrays.deepEquals(array1, array2) 比较多维数组是否相等。

示例

java 复制代码
import java.util.Arrays;

public class ArraysEqualsExample {
    public static void main(String[] args) {
        int[] nums1 = {1, 2, 3};
        int[] nums2 = {1, 2, 3};
        int[] nums3 = {3, 2, 1};

        System.out.println(Arrays.equals(nums1, nums2)); // true
        System.out.println(Arrays.equals(nums1, nums3)); // false

        int[][] multi1 = {{1, 2}, {3, 4}};
        int[][] multi2 = {{1, 2}, {3, 4}};
        System.out.println(Arrays.deepEquals(multi1, multi2)); // true
    }
}

1.6 转换
方法 描述
Arrays.toString(array) 将一维数组转换为字符串表示。
Arrays.deepToString(array) 将多维数组转换为字符串表示。

示例

java 复制代码
import java.util.Arrays;

public class ArraysToStringExample {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        System.out.println(Arrays.toString(nums)); // [1, 2, 3]

        int[][] multi = {{1, 2}, {3, 4}};
        System.out.println(Arrays.deepToString(multi)); // [[1, 2], [3, 4]]
    }
}

1.7 流操作
方法 描述
Arrays.stream(array) 将数组转换为流(Stream),适合配合流操作使用。

示例

java 复制代码
import java.util.Arrays;

public class ArraysStreamExample {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};

        int sum = Arrays.stream(nums).sum(); // 求和
        System.out.println(sum); // 15

        long count = Arrays.stream(nums).filter(x -> x % 2 == 0).count(); // 统计偶数个数
        System.out.println(count); // 2
    }
}

2. 注意事项

  1. 多维数组比较与操作:

    • Arrays.equals 只能比较一维数组。
    • 对多维数组,需要使用 Arrays.deepEqualsArrays.deepToString
  2. 性能优化:

    • Arrays.parallelSort 适合大数组的排序,能够利用多核 CPU。
  3. 数组是固定大小:

    • 数组的大小固定,如果需要动态调整大小,请使用集合类(如 ArrayList)。

3. 常见使用场景

  1. 排序和二分查找:

    • 使用 Arrays.sort 排序后,再用 Arrays.binarySearch 快速查找。
  2. 数组初始化:

    • Arrays.fill 快速填充数组,避免手动初始化。
  3. 数组转换:

    • 将数组转换为字符串输出,用于调试和日志。
  4. 流式操作:

    • 使用 Arrays.stream 对数组进行复杂操作,如过滤、映射和归约。

总结

Arrays 类提供了丰富的工具方法,极大地简化了对数组的操作。在实际开发中,特别是涉及排序、搜索和初始化等操作时,它是非常常用且高效的工具类。

相关推荐
chilavert3182 分钟前
技术演进中的开发沉思-356:重排序(中)
java·开发语言
毕设源码-邱学长2 分钟前
【开题答辩全过程】以 基于SSM的儿童福利院管理系统为例,包含答辩的问题和答案
java·eclipse
jianghua0012 分钟前
Python中的简单爬虫
爬虫·python·信息可视化
TT哇8 分钟前
【实习】数字营销系统 银行经理端(interact_bank)前端 Vue 移动端页面的 UI 重构与优化
java·前端·vue.js·ui
喵手12 分钟前
Python爬虫实战:针对Python官网,精准提取出每一个历史版本的版本号、发布日期以及对应的文档/详情页链接等信息,并最终清洗为标准化的CSV文件!
爬虫·python·爬虫实战·零基础python爬虫教学·python官方数据采集·采集历史版本版本号等信息·导出csv文件
Elieal18 分钟前
SpringBoot 数据层开发与企业信息管理系统实战
java·spring boot·后端
识君啊18 分钟前
MyBatis-Plus 逻辑删除导致唯一索引冲突的解决方案
java·spring boot·mybatis·mybatis-plus·唯一索引·逻辑删除
Coder_Boy_19 分钟前
Java开发者破局指南:跳出内卷,借AI赋能,搭建系统化知识体系
java·开发语言·人工智能·spring boot·后端·spring
QT.qtqtqtqtqt21 分钟前
SQL注入漏洞
java·服务器·sql·安全
独自破碎E24 分钟前
BISHI23 小红书推荐系统
java·后端·struts