Java Arrays 工具类全解析:从常用方法到实战技巧

在 Java 中,数组是常用的数据结构,但直接操作数组往往需要编写大量重复代码。java.util.Arrays工具类封装了一系列静态方法,可快速实现数组的排序、查找、复制等操作,极大简化开发。本文结合实例,详细讲解Arrays类的核心方法及使用场景。

一、Arrays 核心方法详解

1. toString(数组):数组转字符串

功能:将数组元素拼接为[元素1, 元素2, ...]格式的字符串,方便打印输出。
示例

int[] arr = {1, 3, 5, 7};
System.out.println(Arrays.toString(arr)); // 输出:[1, 3, 5, 7]

注意:支持所有基本数据类型和对象数组(对象需重写toString()方法)。

2. binarySearch(数组, 目标元素):二分查找

功能:在升序数组中查找目标元素的索引,效率远高于顺序查找。
返回值

  • 找到元素:返回对应索引;
  • 未找到元素:返回-(插入点 + 1)(插入点为元素应插入的位置)。
    示例
    int[] arr = {2, 4, 6, 8};
    int index = Arrays.binarySearch(arr, 6); 
    System.out.println(index); // 输出:2(6在索引2位置)
    
    int notFound = Arrays.binarySearch(arr, 5); 
    System.out.println(notFound); // 输出:-3(5应插入索引2,故-(2+1) = -3)

注意:数组必须是升序的,否则结果不可靠。

3. 数组复制:copyOf()copyOfRange()
  • copyOf(原数组, 新长度):从原数组 0 索引开始复制,新数组长度由参数指定。

    • 若新长度 > 原数组长度:多余位置用默认值填充(如 int 数组补 0,对象数组补 null);
    • 若新长度 < 原数组长度:截断原数组。
  • copyOfRange(原数组, 开始索引, 结束索引):复制原数组中[开始索引, 结束索引)范围的元素(左闭右开)。

示例

int[] arr = {10, 20, 30, 40};
// copyOf:复制前3个元素
int[] copy1 = Arrays.copyOf(arr, 3); 
System.out.println(Arrays.toString(copy1)); // [10, 20, 30]

// copyOfRange:复制索引1到3(不含3)的元素
int[] copy2 = Arrays.copyOfRange(arr, 1, 3); 
System.out.println(Arrays.toString(copy2)); // [20, 30]
4. fill(数组, 元素):填充数组

功能:将数组所有元素替换为指定值,常用于初始化数组。
示例

int[] arr = new int[5];
Arrays.fill(arr, 9); // 填充所有元素为9
System.out.println(Arrays.toString(arr)); // [9, 9, 9, 9, 9]
5. 排序:sort()与定制排序
  • sort(数组):对数组进行自然排序(升序),支持基本数据类型和实现Comparable接口的对象数组。

  • sort(数组, 比较器):通过Comparator指定排序规则,支持自定义排序(如降序)。

示例

// 基本类型升序排序
int[] arr1 = {3, 1, 4, 2};
Arrays.sort(arr1); 
System.out.println(Arrays.toString(arr1)); // [1, 2, 3, 4]

// 对象数组定制排序(降序)
Integer[] arr2 = {3, 1, 4, 2};
Arrays.sort(arr2, (a, b) -> b - a); // 用Lambda表达式指定降序
System.out.println(Arrays.toString(arr2)); // [4, 3, 2, 1]

二、使用注意事项

  1. 线程安全性Arrays类的方法均为静态方法,且未同步,多线程环境下需手动保证线程安全。
  2. 对象数组操作:对对象数组使用sort()时,若未实现Comparable或未指定Comparator,会抛出ClassCastException
  3. 性能考量sort()对基本类型采用双轴快速排序,对对象数组采用 TimSort(归并排序变种),效率较高,无需重复造轮子。

总结

Arrays工具类涵盖了日常开发中常用的数组处理场景。掌握toString()binarySearch()copyOf()sort()等方法,能显著减少重复代码,提升开发效率。实际使用时需注意数组的有序性、范围边界及数据类型适配,让数组操作更简洁高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值