Java进阶——常用工具类
日常开发中,Arrays、Collections 和 Objects 是非常实用的工具类,提供了丰富的功能,从而可以更高效地处理数组、集合和对象。本文将详细介绍这三个工具类的重要知识细节。
本文目录
- 一、 Arrays
- 数组转集合
- 并行排序优化
- Stream 支持
- 二、 Collections
- 同步包装
- 排序与查找
- 三、 Objects
- 空安全比较
- 参数校验
- 空值链式处理
- 性能对比
- 总结
一、 Arrays
数组转集合
将数组转换为集合是一个常见的操作,但需要注意的是,Arrays.asList() 返回的 List 是固定大小的,不支持 add 和 remove 操作。
String[] skus = {"A001", "B002"};
List<String> skuList = Arrays.asList(skus);
// 不支持 add/remove
skuList.add("C003"); // 抛出 UnsupportedOperationException
并行排序优化
当处理大量数据时,Arrays.parallelSort() 可以利用多核并行排序,比串行排序快 2 - 3 倍。
int[] orderAmounts = getLargeOrderData(); // 假设有10 万+数据
Arrays.parallelSort(orderAmounts); // 多核并行排序
Stream 支持
Arrays.stream() 可以将数组转换为流,方便进行各种流操作。
// 统计订单数量
long bigOrders = Arrays.stream(orderAmounts).filter(amount -> amount > 10000).count();
二、 Collections
同步包装
Collections.synchronizedList() 可以创建线程安全的集合,但遍历时仍需手动同步。
// 创建线程安全的购物车
List<CartItem> cart = Collections.synchronizedList(new ArrayList<>());
synchronized(cart) {for (CartItem item : cart) {processItem(item);}
}
排序与查找
Collections.sort() 可以对集合进行排序,Collections.binarySearch() 可以进行二分查找,但二分查找前必须先排序。
// 按价格排序商品
List<Product> products = getProducts();
Collections.sort(products, Comparator.comparing(Product::getPrice));// 二分查找
int index = Collections.binarySearch(products, targetProduct, priceComparator);
三、 Objects
空安全比较
Objects.equals() 可以自动处理 null 值,避免 NullPointerException。
public boolean isSameUser(User u1, User u2) {return Objects.equals(u1.getUserId(), u2.getUserId()); // 自动处理 null 值
}
参数校验
Objects.requireNonNull() 可以对参数进行非空校验,Objects.requireNonNullElse() 可以自定义空值异常消息。
public void processOrder(Order order) {Objects.requireNonNull(order, "订单不能为 null");// 其他处理...
}// 自定义空值异常消息
String address = Objects.requireNonNullElse(user.getAddress(), "默认地址"
);
空值链式处理
Objects.requireNonNullElse() 可以进行多层空值防护。
// 获取用户所在城市(多层空值防护)
String city = Objects.requireNonNullElse(user.getAddress(),new Address()
).getCity();
以上只是总结了工具类经常使用的方法,类中还有更多使用方法,可以多看看哦。
性能对比
| 操作 | 推荐方案 | 避免方案 | 原因 |
|---|---|---|---|
| 空集合返回 | Collections.emptyList() | new ArrayList<>(0) | 节省内存,语义明确 |
| 数组转集合 | new ArrayList<>(Arrays.asList(arr)) | 直接使用 Arrays.asList() | 避免固定大小限制 |
| 深度哈希码计算 | Objects.hash(field1, field2, ...) | 手动拼接哈希码 | 自动处理 null 和数组 |
| 线程安全集合遍历 | 手动 synchronized 块 | 依赖 synchronizedXXX() | 防止并发修改异常 |
总结
Arrays:专注数组操作,注意asList的固定大小特性。Collections:提供集合工具方法,理解不可变/同步集合的局限。Objects:空值处理和参数校验,避免NullPointerException。
| ← 上一篇 Java进阶——Stream流以及常用方法详解 | 记得点赞、关注、收藏哦! | 下一篇 Java进阶——注解一文全懂 → |
相关文章:
Java进阶——常用工具类
日常开发中,Arrays、Collections 和 Objects 是非常实用的工具类,提供了丰富的功能,从而可以更高效地处理数组、集合和对象。本文将详细介绍这三个工具类的重要知识细节。 本文目录 一、 Arrays数组转集合并行排序优化Stream 支持 二、 Colle…...
【考试大纲】高级系统架构设计师考试大纲
目录 引言一、 考试说明1.考试目标2.考试要求3.考试科目设置二、 考试范围考试科目1:系统架构设计综合知识考试科目2:系统架构设计案例分析考试科目3:系统架构设计论文引言 最新的系统架构设计师考试大纲出版于 2022 年 11 月,本考试大纲基于此版本整理。 一、 考试说明…...
上位机知识篇---四种CPU架构交叉编译
文章目录 前言一、四种 CPU 架构1. x86/x86_64指令集位宽:应用场景编译工具 2. ARM指令集位宽:应用场景编译工具 3. MIPS指令集位宽应用场景编译工具 4. RISC-V指令集位宽应用场景编译工具 二、交叉编译1. 什么是交叉编译?定义应用场景 2. 交…...
隐式转换为什么导致索引失效
SELECT * FROM users WHERE id 123;这条语句失效的原因就是id是int类型的主键,比较的时候把id从int转化为字符串来比较了,而字符串的比较规则和int的比较规则明显不同,字符串是字典序比较的,还涉及到数据的长度,那为什…...
【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现
项目介绍 本课程演示的是一款基于过滤协同算法的旅游推荐管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…...
SpringBoot @Value 注解使用
Value 注解用于将配置文件中的属性值注入到Spring管理的Bean中。 1. 基本用法 Value 可以直接注入配置文件中的属性值。 配置文件 (application.properties 或 application.yml) 配置文件定义需要注入的数据。 consumer:username: lisiage: 23hobby: sing,read,sleepsubje…...
Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言安装JDK 17创建Spring Boot 项目 方式1:网页在线生成方式2&#…...
高频 SQL 50 题(基础版)_1667. 修复表中的名字
高频 SQL 50 题(基础版)_1667. 修复表中的名字 select user_id ,concat(upper(substring(name,1,1)),lower(substring(name,2))) as name from Users order by user_id...
Windwos10 系统没有微软商店(Microsoft Store)怎么办?
操作方法 管理员身份打开power shell , 输入 Get-AppxPackage -AllUsers Microsoft.WindowsStore* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “ ( ( (_.InstallLocation)\AppXManifest.xml”} 按下enter按键,就OK了...
c++同步机制
总结 多线程访问共享数据时需要加锁 多线程数据竞争 假如有一个变量shared_variable被10个线程共享,每个线程在循环中对shared_variable进行 1000 次累加操作,我们期望最终值为10000。 #include <iostream> #include <thread> #include …...
RuoYi框架介绍,以及如何基于Python使用RuoYi框架
若依框架(RuoYi)是一款基于Spring Boot和Vue.js的开源快速开发平台,广泛应用于企业级应用开发。它提供了丰富的功能模块和代码生成工具,帮助开发者快速搭建后台管理系统。 主要特点 前后端分离:前端采用Vue.js&#x…...
Go 语言环境安装
1.go官网下载安装包 All releases - The Go Programming Language 双击安装,一路下一步 2.安装完后查看版本 打开cmd 输入 以下 ,查看语言版本 go version 查看环境变量是否自动设置成功...
vector 面试点总结
ps:部分内容使用“AI”查询 一、入门 1、什么是vector 动态数组容器,支持自动扩容、随机访问和连续内存存储。 2、怎么创建-初始化vector std::vector<int> v; // 创建空vectorstd::vector<int> v {1, 2, 3}; // 直接初始化std::vec…...
Java 8 新特性
Java 8 引入了一系列重要的新特性,极大地增强了 Java 语言的功能,尤其是在 函数式编程、流处理、日期时间 API 和 默认方法 等方面。这些新特性不仅提升了代码的可读性和简洁性,还改善了并发处理的性能。以下是 Java 8 主要新特性的详细说明。…...
知识库技术选型:主流Embedding模型特性对比
知识库技术选型:主流Embedding模型特性对比 1. 知识库与大模型结合的背景 知识库是存储和管理结构化知识的系统,广泛应用于问答系统、推荐系统和搜索引擎等领域。随着大语言模型(LLM)的发展,知识库与大模型的结合成为…...
CAN总线通信协议学习2——数据链路层之帧格式
1 帧格式 帧格式可理解为定义了传输的数据(叫报文)应该“长什么样”来传输,也为后续设定一些规则如错误检查机制提供了思路。 首先,帧格式可分为以下5种类型: PS:CAN总线任意一个设备可当收也可当发&#…...
基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局高阶应用
文字目录 前言第一章、生态安全评价理论及方法介绍一、生态安全评价简介二、生态服务能力简介三、生态安全格局构建研究方法简介 第二章、平台基础一、ArcGIS Pro介绍二、Python环境配置 第三章、数据获取与清洗一、数据获取:二、数据预处理(ArcGIS Pro及…...
神经网络在电力电子与电机控制中的应用
神经网络(Neural Networks)简介 神经网络是一种受生物神经元启发的机器学习模型,能够通过大量数据学习输入与输出之间的非线性映射关系。其核心结构包括: 输入层:接收外部数据(如传感器信号、控制指令&…...
llama-factory || AutoDL平台
报错如下: rootautodl-container-d83e478b47-3def8c49:~/LLaMA-Factory# llamafactory-cli webui * Running on local URL: http://0.0.0.0:7860Could not create share link. Missing file: /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_am…...
数学建模:MATLAB极限学习机解决回归问题
一、简述 极限学习机是一种用于训练单隐层前馈神经网络的算法,由输入层、隐藏层、输出层组成。 基本原理: 输入层接受传入的样本数据。 在训练过程中随机生成从输入层到隐藏层的所有连接权重以及每个隐藏层神经元的偏置值,这些参数在整个…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
