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

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)

相关文章:

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

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

架构-系统可靠性分析与设计

一、可靠性相关基本概念 1. 可靠性与可用性 可靠性&#xff1a;软件系统在遇到错误、意外操作或系统故障时&#xff0c;仍能维持自身功能特性的能力。 举例&#xff1a;手机银行APP在用户误操作&#xff08;如快速点击多次转账&#xff09;时&#xff0c;仍能正确处理交易并避…...

【AI】[特殊字符]生产规模的向量数据库 Pinecone 使用指南

一、Pinecone 的介绍 Pinecone是一个完全托管的向量数据库服务&#xff0c;专为大规模机器学习应用设计。它允许开发者轻松存储、搜索和管理高维向量数据&#xff0c;为推荐系统、语义搜索、异常检测等应用提供强大的基础设施支持。 1.1 Pinecone的核心特性 1. 高性能向量搜…...

大模型备案对模型训练语料的要求

昨天接到一位客户的咨询&#xff0c;说他们的模型还在开发阶段&#xff0c;想提前了解一下大模型备案政策中对于模型训练语料有什么具体要求&#xff0c;提前规避一下。客户确实有前瞻性&#xff0c;考虑得比较充分。训练语料在研发阶段至关重要&#xff0c;直接影响模型的性能…...

dstream

DStream转换DStream 上的操作与 RDD 的类似&#xff0c;分为 Transformations&#xff08;转换&#xff09;和 Output Operations&#xff08;输出&#xff09;两种&#xff0c;此外转换操作中还有一些比较特殊的原语&#xff0c;如&#xff1a;updateStateByKey()、transform(…...

CentOS系统中MySQL安装步骤分享

在 CentOS 系统上安装 MySQL&#xff0c;需要依次进行环境检查、软件源配置、安装 MySQL、启动服务等操作。我将按照规范流程&#xff0c;为你详细分享完整且具体的安装步骤。 在 CentOS 系统中安装 MySQL 数据库&#xff0c;能够为各类应用提供高效稳定的数据存储和管理服务。…...

HFSS5(李明洋)——设置激励(波端口激励)

Magnetic是适用于铁磁氧导体的&#xff0c;只有前三种激励类型可以用于计算S参数 1波端口激励 也可以设置在模型内部&#xff0c;如果是设置在模型内部必须加一段理想导体&#xff0c;用于指定端口方向 1.1——模式 number 输入N&#xff1a;计算1-N的模式都计算 1.2——模式…...

ubiquant比赛系列——用docker准备ubipoker开发环境

比赛过程&#xff1a; 环境准备&#xff1a; #在云服务器上拉python官方的docker镜像并下载到本地 https://hub.docker.com/_/python/ sudo docker pull python:3.11.12-slim-bullseye sudo docker images sudo docker save -o 3.11.12-slim-bullseye.tar python:3.11.12-slim…...

运维打铁:Mysql 分区监控以及管理

文章目录 一、简介二、设计逻辑1、配置文件检查2、创建逻辑3、 删除逻辑4、重建表分区逻辑5、recognize maxvalue分区表逻辑6、创建多个未来分区逻辑7、定时检测分区是否创建成功&#xff0c;否则发送告警邮件。 三、解决的问题四、配置例子与介绍 一、简介 操作数据库&#xf…...

Rust实现高性能目录扫描工具ll的技术解析

Rust实现高性能目录扫描工具ll的技术解析 一、项目概述 本项目使用Rust构建了一个类ls命令行工具&#xff0c;具备以下核心特性&#xff1a; 多格式文件信息展示并行目录扫描加速人类可读文件大小运行时性能统计交互式进度提示 二、技术架构 1. 关键技术栈 clap&#xff…...

深入理解C语言变量:从基础到实践

在编程世界中&#xff0c;变量是最基础也是最重要的概念之一。作为C语言的核心组成部分&#xff0c;变量承载着程序运行时数据的存储和传递功能。理解变量的工作原理和正确使用方法&#xff0c;是成为一名合格C程序员的必经之路。本文将全面介绍C语言变量的各个方面&#xff0c…...

深入解析 SMB 相关命令:smbmap、smbclient、netexec 等工具的使用指南

Server Message Block&#xff08;SMB&#xff09;协议是广泛应用于文件共享、打印机共享和进程间通信的网络协议&#xff0c;尤其在 Windows 环境中常见。渗透测试和网络安全审计中&#xff0c;SMB 是一个重要的攻击面&#xff0c;相关工具如 smbmap、smbclient 和 netexec 提…...

RK3562/3588 系列之0—NPU基础概念

RK3562/3588 系列之0—NPU基础概念 1.处理器分类2.算力衡量指标TOPS参考文献 1.处理器分类 中央处理器(CPU)&#xff1b; 图形处理器 (GPU)&#xff1b; 神经网络处理器(NPU)。 每个处理器擅长不同的任务:CPU擅长顺序控制和即时性&#xff1b;GPU适合并行数据流处理,NPU擅长…...

springboot如何管理多数据源?

静态多数据源管理 配置多个数据源 :创建多个数据源的配置类,通常使用 @ConfigurationProperties 注解来绑定配置文件中的数据源属性,并通过 @Bean 注解定义多个 DataSource Bean 。例如: 配置类: @Configuration public class DataSourceConfig {@Bean(name = "prima…...

为什么vue的key值,不用index?

在 Vue 中&#xff0c;key 的作用是帮助框架高效地识别和复用 DOM 节点或组件实例。使用数组索引 (index) 作为 key 值可能会导致以下问题&#xff0c;因此通常不建议这样做&#xff1a; 1. 列表数据变化时&#xff0c;可能导致错误的 DOM 复用 问题&#xff1a;当列表的顺序…...

canvas画板!随意画!!

希望你天天开心 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>绘画板</title…...

Float32、Float16、BFloat16

我们先介绍 Float32、Float16、BFloat16 的 浮点数表示方法 然后根据浮点数表示&#xff0c;来分析总结他们是怎么控制 精度和 数值范围 的 最后再来对比的说明 Float32、Float16、BFloat16 的 应用场景 和 硬件支持 1、浮点数的表示方法 Float32 &#xff1a; 单精度浮点数…...

C# new Bitmap(32043, 32043, PixelFormat.Format32bppArgb)报错:参数无效,如何将图像分块化处理?

C#处理非常大的图像&#xff08;如 32043x32043 像素&#xff09;时&#xff0c;确实需要采取分块化处理的方法来避免内存不足的问题。分块化处理可以将大图像分割成多个较小的块&#xff0c;分别进行处理和保存&#xff0c;最后再合并这些块以形成完整的图像。以下是一个详细的…...

5V 1A充电标准的由来与技术演进——从USB诞生到智能手机时代的电力革命

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 一、起源&#xff1a;USB标准与早期电力传输需求 1. USB的诞生背景 1996年&#xff0c;由英特尔、微软、IBM等公司组成的USB-IF&#xff08;USB Implementers Forum&#xff09;发布了…...

微信小程序蓝牙连接打印机打印单据完整Demo【蓝牙小票打印】

文章目录 一、准备工作1. 硬件准备2. 开发环境 二、小程序配置1. 修改app.json 三、完整代码实现1. pages/index/index.wxml2. pages/index/index.wxss3. pages/index/index.js 四、ESC/POS指令说明五、测试流程六、常见问题解决七、进一步优化建议 下面我将提供一个完整的微信…...

龙虎榜——20250425

指数依然在震荡&#xff0c;等待方向选择&#xff0c;整体量能不搞但个股红多绿少。 2025年4月25日龙虎榜行业方向分析 一、核心主线方向 绿色电力&#xff08;政策驱动业绩弹性&#xff09; • 代表标的&#xff1a;华银电力&#xff08;绿电运营&#xff09;、西昌电力&…...

计算机组成原理:指令系统

计算机组成原理:指令集系统 指令集体系结构(ISA)ISA定义ISA包含的内容举个栗子指令的基本组成(操作码+地址码)指令分类:地址码的个数定长操作码变长操作码变长操作码的原则变长操作码的设计指令寻址寻址方式的目的寻址方式分类有效地址直接在指令中给出有效地址间接给出有效地…...

【Go语言】RPC 使用指南(初学者版)

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;允许程序调用另一台计算机上的子程序&#xff0c;就像调用本地程序一样。Go 语言内置了 RPC 支持&#xff0c;下面我会详细介绍如何使用。 一、基本概念 在 Go 中&…...

Python----深度学习(基于深度学习Pytroch簇分类,圆环分类,月牙分类)

一、引言 深度学习的重要性 深度学习是一种通过模拟人脑神经元结构来进行数据学习和模式识别的技术&#xff0c;在分类任务中展现出强大的能力。 分类任务的多样性 分类任务涵盖了各种场景&#xff0c;例如簇分类、圆环分类和月牙分类&#xff0c;每种任务都有不同的…...

入侵检测系统(IDS)与入侵防御系统(IPS):功能对比与部署实践

入侵检测系统&#xff08;IDS&#xff09;与入侵防御系统&#xff08;IPS&#xff09;&#xff1a;功能对比与部署实践 在网络安全防御体系中&#xff0c;入侵检测系统&#xff08;Intrusion Detection System, IDS&#xff09;与入侵防御系统&#xff08;Intrusion Preventio…...

uniapp-商城-38-shop 购物车 选好了 进行订单确认4 配送方式1

配送方式在订单确认页面最上方&#xff0c;可以进行选中配送还是自提&#xff0c;这里先看看配送。 代码样式&#xff1a; 可以看出来是通过组件来实现的。组件名字是&#xff1a;delivery-layout 1、建立组件文件夹和页面&#xff0c;delivery-layout这里就只有配送 2、具体…...

uniappx 打包配置32位64位x86安装包

{"app": {"distribute": {"android": {"abiFilters": ["armeabi-v7a","arm64-v8a","x86","x86_64"]}}} }...

【深度强化学习 DRL 快速实践】逆向强化学习算法 (IRL)

Inverse Reinforcement Learning (IRL) 详解 什么是 Inverse Reinforcement Learning&#xff1f; 在传统的强化学习 (Reinforcement Learning, RL) 中&#xff0c;奖励函数是已知的&#xff0c;智能体的任务是学习一个策略来最大化奖励 而在逆向强化学习 (Inverse Reinforc…...

《普通逻辑》学习记录——性质命题及其推理

目录 一、性质命题概述 二、性质命题的种类 2.1、性质命题按质的分类 2.2、性质命题按量的分类 2.3、性质命题按质和量结合的分类 2.4、性质命题的基本形式归纳 三、四种命题的真假关系 3.1、性质命题与对象关系 3.2、四种命题的真假判定 3.3、四种命题的对当关系 四、四种命题…...

人工智能(AI)对网络管理的影响

近年来&#xff0c;人工智能(AI)尤其是大语言模型(LLMs)的快速发展&#xff0c;正在深刻改变网络管理领域。AI的核心价值在于其能够通过自动化、模式分析和智能决策&#xff0c;显著提升网络运维效率并应对复杂挑战。具体表现为&#xff1a; 快速数据查询与分析​​&#xff1…...