当前位置: 首页 > web >正文

ArrayUtils:数组操作的“变形金刚“——让你的数组七十二变

各位数组操控师们好!今天给大家带来的是Apache Commons Lang3中的ArrayUtils工具类。这个工具就像数组界的"孙悟空",能让你的数组随心所欲地变大、变小、变长、变短,再也不用对着原生数组的"死板"叹气了!

一、为什么需要ArrayUtils?

原生Java数组就像一块"铁板":

  • 长度固定?改不了!
  • 想加个元素?重写一个!
  • 找元素位置?自己循环!

而ArrayUtils就是给你的数组装上"变形按钮":

// 原始人写法
String[] oldArray = {"Java", "Python"};
String[] newArray = new String[oldArray.length + 1];
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
newArray[newArray.length - 1] = "Go";// ArrayUtils现代写法
String[] languages = ArrayUtils.add(new String[]{"Java", "Python"}, "Go");

二、ArrayUtils的"七十二变"

1. 数组扩容术(添加元素)

// 基本用法
int[] numbers = {1, 2, 3};
numbers = ArrayUtils.add(numbers, 4); // [1, 2, 3, 4]// 指定位置插入
numbers = ArrayUtils.insert(2, numbers, 99); // [1, 2, 99, 3, 4]

2. 数组缩身法(删除元素)

// 按索引删除
String[] fruits = {"Apple", "Banana", "Orange"};
fruits = ArrayUtils.remove(fruits, 1); // ["Apple", "Orange"]// 按元素删除(只删第一个匹配项)
fruits = ArrayUtils.removeElement(fruits, "Orange"); // ["Apple"]

3. 数组查找功

// 查找元素位置
int[] primes = {2, 3, 5, 7, 11};
int index = ArrayUtils.indexOf(primes, 5); // 2// 检查包含关系
boolean hasEven = ArrayUtils.contains(primes, 2); // true

4. 数组分身术(子数组)

// 截取子数组
int[] subArray = ArrayUtils.subarray(primes, 1, 4); // [3, 5, 7]// 克隆数组(深拷贝)
int[] clone = ArrayUtils.clone(primes);

5. 数组变身大法(类型转换)

// 包装类型转换
Integer[] boxed = ArrayUtils.toObject(primes);// 基本类型转换
int[] unboxed = ArrayUtils.toPrimitive(boxed);

三、高级"仙术"展示

1. 数组合并

String[] frontend = {"HTML", "CSS"};
String[] backend = {"Java", "Python"};
String[] fullstack = ArrayUtils.addAll(frontend, backend);
// ["HTML", "CSS", "Java", "Python"]

2. 数组反转

ArrayUtils.reverse(fullstack);
// ["Python", "Java", "CSS", "HTML"]

3. 数组填充

int[] empty = new int[5];
ArrayUtils.fill(empty, 42); // [42, 42, 42, 42, 42]

4. 空数组安全

// 安全处理null数组
String[] maybeNull = null;
String[] safeArray = ArrayUtils.nullToEmpty(maybeNull); // 返回空数组而非null

四、ArrayUtils的"修仙指南"

  1. 性能提示:频繁操作考虑先用List再转数组
  2. null安全:所有方法都处理null输入
  3. 多维数组:支持多维数组操作(如indexOf多维查找)
  4. 特殊比较:提供equals()方法比较数组内容

五、与传统方法的"功力对比"

操作原生写法代码量ArrayUtils代码量
添加元素5-7行1行
删除元素需要循环1行
查找元素需要循环1行
数组合并System.arraycopy1行

六、现代"御剑飞行"方案

// Java 8 Stream方案(适合复杂操作)
String[] filtered = Arrays.stream(fullstack).filter(s -> !s.equals("CSS")).toArray(String[]::new);// 与Collections配合使用
List<String> list = new ArrayList<>(Arrays.asList(fullstack));
list.add("JavaScript");
String[] updated = list.toArray(new String[0]);

七、总结

ArrayUtils就像是:

  • 数组扩容的"金箍棒"🔨
  • 元素操作的"筋斗云"☁️
  • 数组查找的"火眼金睛"👀
  • null安全的"避雷针"⚡

记住数组操作的真理:“直接操作数组就像用牙啃椰子,用对工具才是王道!”

最后送上数组操作速查表:

需求ArrayUtils方法示例
添加元素add() / addAll()add(array, element)
删除元素remove() / removeElement()remove(array, index)
查找元素indexOf() / contains()indexOf(array, value)
子数组subarray()subarray(array, start, end)
空数组转换nullToEmpty()nullToEmpty(null)
数组反转reverse()reverse(array)
http://www.xdnf.cn/news/1841.html

相关文章:

  • python实现简单的UI交互
  • RT Thread 发生异常时打印输出cpu寄存器信息和栈数据
  • C++11介绍
  • 【阿里云大模型高级工程师ACP习题集】2.5 优化RAG应用提升问答准确度(⭐️⭐️⭐️ 重点章节!!!)
  • C++面试复习日记(8)2025.4.25,malloc,free和new,delete的区别
  • Maven基础、HTTP协议、请求响应(Web后端笔记第一期)
  • 策略模式(Strategy Pattern)详解
  • 深度学习--自然语言处理统计语言与神经语言模型
  • 打造高功率、高电流和高可靠性电路板的厚铜PCB生产
  • 基于STM32的温室环境智能调控系统仿真(仿真+代码)
  • 统计术语学习
  • 鸿蒙应用开发证书考试的一点想法
  • 大量化平台也有坑?khQuant回测横评第二弹,一次“排雷”实录【AI量化第28篇】
  • GitHub每日最火火火项目(4.25)
  • 【沉浸式求职学习day25】【部分网络编程知识分享】【基础概念以及简单代码】
  • 防火墙原理与应用总结
  • re.compile(pattern) 是什么
  • day37图像处理OpenCV
  • [贪心_7] 最优除法 | 跳跃游戏 II | 加油站
  • vue滑块组件设计与实现
  • 高防IP+CDN组合:电商大促的“双保险”防护方案
  • Spine 动画教程:皮肤制作
  • 浅析锁的应用与场景
  • CSS 入门全解析
  • 实验3 函数与代码复用
  • 【Java学习日记26】:方法的重载
  • 通道降维方式
  • Java大模型开发与应用 - 面试实战
  • 【金仓数据库征文】金仓数据库KingbaseES:在技术与人文交织中开拓信创未来
  • 【Linux】gdb工具,Linux 下程序调试的 “透视眼”