Java学习---Arrays类

在Java中,Arrays类是java.util包中的一个工具类 ,专门为数组操作提供了一系列静态方法。它不是用来创建数组的,而是用来操作和处理已存在的数组

首先澄清一个常见混淆:

概念 说明 示例
数组 (Array) Java语言内置的数据结构 int[] arr = new int[5];
Arrays类 操作数组的工具类 Arrays.sort(arr);

Arrays类核心方法详解

1. 导入Arrays类
java 复制代码
import java.util.Arrays;  // 必须导入才能使用
2.数组转字符串
java 复制代码
public class ArraysToStringDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        
        // 1. Arrays.toString() - 一维数组转字符串
        String str = Arrays.toString(arr);
        System.out.println("toString(): " + str);  // [1, 2, 3, 4, 5]
        
        // 2. Arrays.deepToString() - 多维数组转字符串
        int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        String Str = Arrays.deepToString(matrix);
        System.out.println("deepToString(): " + Str);  // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
        
    }
}
3. 数组的创建与填充

Array.fill

java 复制代码
public class ArraysDemo1 {
    public static void main(String[] args) {
        // Arrays.fill() - 填充数组
        
        // 填充整个数组
        int[] arr1 = new int[5];
        Arrays.fill(arr1, 100);  // 所有元素变为100
        System.out.println(Arrays.toString(arr1));  // [100, 100, 100, 100, 100]
        
        // 填充指定范围 [from, to)
        int[] arr2 = new int[10];
        Arrays.fill(arr2, 2, 6, 99);  // 将索引[2,6)的元素填充为99
        System.out.println(Arrays.toString(arr2));  // [0, 0, 99, 99, 99, 99, 0, 0, 0, 0]
        
        // 创建时直接填充(Java 8+)
        int[] arr3 = new int[5];
        Arrays.setAll(arr3, i -> i * 2);  // [0, 2, 4, 6, 8]
        
        // 并行填充(大数据量性能更好)
        int[] arr4 = new int[1_000_000];
        Arrays.parallelSetAll(arr4, i -> i % 10);
    }
}
4. 数组排序
java 复制代码
public class ArraysSortDemo {
    public static void main(String[] args) {
        // 基本数据类型排序
        int[] numbers = {34, 12, 89, 5, 67};
        Arrays.sort(numbers);  // 升序排序
        System.out.println("排序后: " + Arrays.toString(numbers));  // [5, 12, 34, 67, 89]
        
        // 部分排序(对指定范围排序)
        int[] arr = {34, 12, 89, 5, 67, 23, 11};
        Arrays.sort(arr, 2, 6);  // 只排序索引[2,6)的元素
        System.out.println("部分排序: " + Arrays.toString(arr));  // [34, 12, 5, 23, 67, 89, 11]
        
        // 字符串数组排序
        String[] names = {"张三", "李四", "王五", "赵六"};
        Arrays.sort(names);
        System.out.println("名字排序: " + Arrays.toString(names));  // 按Unicode排序
        
}
5. 数组搜索
java 复制代码
public class ArraysSearchDemo {
    public static void main(String[] args) {
        //  重要:binarySearch要求数组必须已排序!
        
        int[] arr = {10, 20, 30, 40, 50, 60};
        
        // 二分查找(返回索引,找不到返回负数)
        int index = Arrays.binarySearch(arr, 30);
        System.out.println("30的索引: " + index);  // 2
        
        index = Arrays.binarySearch(arr, 35);
        System.out.println("35的索引: " + index);  // -4(插入点:-索引-1)
        
        // 在指定范围内搜索
        index = Arrays.binarySearch(arr, 1, 4, 20);  // 在[1,4)范围内搜索
        System.out.println("20在范围[1,4)的索引: " + index);  // 1
        
        // 字符串数组搜索
        String[] names = {"apple", "banana", "cherry", "date"};
        Arrays.sort(names);  // 先排序!
        int strIndex = Arrays.binarySearch(names, "cherry");
        System.out.println("cherry的索引: " + strIndex);  // 2
       
    }
}
6. 数组比较与相等性判断
java 复制代码
public class ArraysCompareDemo {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5};
        int[] arr2 = {1, 2, 3, 4, 5};
        int[] arr3 = {1, 2, 3, 4};
        int[] arr4 = {5, 4, 3, 2, 1};
        
        // 1. Arrays.equals() - 比较数组内容是否相等
        boolean isEqual = Arrays.equals(arr1, arr2);
        System.out.println("arr1 equals arr2: " + isEqual);  // true
        
        isEqual = Arrays.equals(arr1, arr3);
        System.out.println("arr1 equals arr3: " + isEqual);  // false(长度不同)
        
        // 2. Arrays.compare() - 比较数组的字典顺序(Java 9+)
        // 返回负数、零、正数表示小于、等于、大于
        int result = Arrays.compare(arr1, arr4);
        System.out.println("arr1 compare arr4: " + result);  // 负数(arr1 < arr4)
        
    }
}
7. 数组复制
java 复制代码
public class ArraysCopyDemo {
    public static void main(String[] args) {
        int[] original = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        
        // 1. Arrays.copyOf() - 复制指定长度
        int[] copy1 = Arrays.copyOf(original, 5);  // 复制前5个元素
        System.out.println("copyOf(5): " + Arrays.toString(copy1));  // [1, 2, 3, 4, 5]
        
        int[] copy2 = Arrays.copyOf(original, 15);  // 长度大于原数组,多余位置补0
        System.out.println("copyOf(15): " + Arrays.toString(copy2));  // 后面补0
        
        // 2. Arrays.copyOfRange() - 复制指定范围
        int[] copy3 = Arrays.copyOfRange(original, 2, 7);  // 复制[2,7)索引的元素
        System.out.println("copyOfRange(2,7): " + Arrays.toString(copy3));  // [3, 4, 5, 6, 7]
        
        // 3. 与System.arraycopy()的比较
        int[] copy4 = new int[5];
        System.arraycopy(original, 3, copy4, 0, 5);  // 从original[3]开始复制5个元素到copy4
        System.out.println("System.arraycopy: " + Arrays.toString(copy4));  // [4, 5, 6, 7, 8]
        
    }
}
时间复杂度对比
操作 普通方法 Arrays类方法 时间复杂度
排序 手动实现 Arrays.sort() O(n log n)
搜索(无序) 线性搜索 Arrays.binarySearch() O(log n)(需先排序)
比较 逐个比较 Arrays.equals() O(n)
复制 循环复制 Arrays.copyOf() O(n)
相关推荐
谈笑也风生1 天前
经典算法题型之复数乘法(二)
开发语言·python·算法
hkNaruto1 天前
【C++】记录一次C++程序编译缓慢原因分析——滥用stdafx.h公共头文件
开发语言·c++
shenghaide_jiahu1 天前
数学分析简明教程——总练习题6
学习
石像鬼₧魂石1 天前
HexStrike AI 理想操作流程清单(完整功能版)
linux·人工智能·windows·学习·ubuntu
czhc11400756631 天前
C# 1221
java·servlet·c#
先知后行。1 天前
python的类
开发语言·python
黄俊懿1 天前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——全局事务的回滚
java·后端·spring·spring cloud·微服务·架构·架构师
派大鑫wink1 天前
【Day12】String 类详解:不可变性、常用方法与字符串拼接优化
java·开发语言
JIngJaneIL1 天前
基于springboot + vue健康管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端
秋饼1 天前
【三大锁王争霸赛:Java锁、数据库锁、分布式锁谁是卷王?】
java·数据库·分布式