当前位置:首页 > 技术 > 正文内容

Java集合工具类与Hutool实战指南

访客 技术 2026年7月22日 4

Collections 类深度解析

类定位与特性

Collections 是 Java 集合框架的核心工具类,专门提供静态方法对集合对象进行操作。作为集合的"大管家",它与 Arrays 互补——后者处理数组,前者处理 Collection 体系(包括 ListSetMap 等)。该类所有方法均为静态方法,无需实例化即可调用,核心功能涵盖排序、查找、同步控制及不可变集合创建等场景。

核心方法体系

排序与交换操作

集合排序是高频需求,Collections 提供了丰富的排序方法:

方法签名 作用描述
reverse(List list) 将列表内元素顺序完全颠倒
shuffle(List list) 随机打乱元素顺序(类似扑克牌洗牌)
sort(List list) 按自然升序排列元素
sort(List list, Comparator c) 按指定比较规则排序
swap(List list, int i, int j) 交换指定索引位置的元素

实际应用示例:

List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 2, 8, 1, 9));
Collections.reverse(numbers);
Collections.shuffle(numbers);
Collections.sort(numbers);
Collections.sort(numbers, Comparator.reverseOrder());
Collections.swap(numbers, 0, numbers.size() - 1);

查找与统计功能

二分查找要求集合预先排序,否则结果不确定:

方法 功能说明
binarySearch(List list, Object key) 二分查找目标元素(需先排序)
max(Collection coll) / min(Collection coll) 获取最大/最小元素
max(Collection coll, Comparator comp) 按自定义规则获取极值
fill(List list, Object obj) 用指定对象填充集合所有位置
frequency(Collection c, Object o) 统计元素出现频次

使用示例:

List<String> names = new ArrayList<>(Arrays.asList("Alice", "Bob", "Charlie", "Alice"));
Collections.sort(names);
int pos = Collections.binarySearch(names, "Bob");
String max = Collections.max(names);
int count = Collections.frequency(names, "Alice");

线程安全包装

JDK 早期通过同步包装器为集合提供线程安全能力:

方法 返回类型 用途
synchronizedList(List list) List 返回同步列表
synchronizedSet(Set set) Set 返回同步集合
synchronizedMap(Map map) Map 返回同步映射

典型用法:

List<String> threadSafeList = Collections.synchronizedList(new ArrayList<>());
Set<Integer> threadSafeSet = Collections.synchronizedSet(new HashSet<>());
Map<String, Object> threadSafeMap = Collections.synchronizedMap(new HashMap<>());

现代开发推荐使用 java.util.concurrent 包下的并发集合类,如 CopyOnWriteArrayListConcurrentHashMapConcurrentLinkedQueue 等,它们采用更高效的锁策略或无锁设计。

不可变集合创建

不可变集合在安全发布和防御性编程中非常重要:

方法 作用
emptyList() / emptySet() / emptyMap() 返回空不可变集合
singletonList(T o) / singletonMap(K, V) 返回单元素不可变集合
unmodifiableList(List list) 包装现有集合为只读视图

示例:

List<String> immutable = Collections.emptyList();
// 下面一行将抛出 UnsupportedOperationException
immutable.add("test"); 

List<String> readOnly = Collections.unmodifiableList(new ArrayList<>());

其他实用方法

Collections.addAll(fruits, "Apple", "Banana", "Orange");
boolean hasOverlap = Collections.disjoint(listA, listB);

扩展工具类:CollectionUtils

除 JDK 原生 Collections 外,Spring 和 Apache Commons 提供了功能更强大的集合工具类。

Spring CollectionUtils

位于 org.springframework.util.CollectionUtils,主要方法:

  • isEmpty(collection) / isNotEmpty(collection) — 判断集合是否为空(同时兼容 null)

Apache Commons CollectionUtils

位于 org.apache.commons.collections4.CollectionUtils,提供集合运算能力:

方法 功能
isEmpty(coll) / isNotEmpty(coll) 空值判断
union(a, b) 并集
intersection(a, b) 交集
disjunction(a, b) 对称差集
subtract(a, b) 差集(a - b)

使用示例:

List<Integer> a = Arrays.asList(1, 2, 3, 4);
List<Integer> b = Arrays.asList(3, 4, 5, 6);

Collection<Integer> unionResult = CollectionUtils.union(a, b);
Collection<Integer> interResult = CollectionUtils.intersection(a, b);
Collection<Integer> diffResult = CollectionUtils.subtract(a, b);
类别 核心方法 用途
排序 reverseshufflesortswap 元素顺序操作
查找 maxminbinarySearchfrequencyfill 元素检索统计
同步 synchronizedListsynchronizedMap 线程安全包装
不可变 emptyListsingletonListunmodifiableList 只读集合创建
扩展 addAlldisjoint 集合批量操作

Hutool 工具库详解

Hutool Logo

工具库概述

Hutool(谐音"糊涂")是国产 Java 工具类库的优秀代表,核心理念是减少重复代码、提供通用封装,让项目中的 util 包更加精简。版本迭代活跃,API 设计友好,是国内 Java 项目中应用广泛的工具类。

快速引入

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.25</version>
</dependency>

核心模块详解

类型转换(Convert)

统一简化类型转换操作,支持字符串与常见类型互转:

int num = Convert.toInt("123", 0);
double price = Convert.toDouble("99.99");
Date date = Convert.toDate("2024-01-15");
String hex = Convert.toHex(new byte[]{1, 2, 3});

日期时间(DateUtil)

比 JDK DateCalendar 更易用的日期处理工具:

Date now = DateUtil.date();
Date parsed = DateUtil.parse("2024-06-20");
String formatted = DateUtil.format(date, "yyyy年MM月dd日");
long diffMs = DateUtil.between(start, end, DateUnit.MS);

IO 与文件(IoUtil、FileUtil)

封装文件读写、流转操作:

String content = FileUtil.readUtf8String(new File("config.txt"));
IoUtil.copy(inputStream, outputStream);
File file = FileUtil.touch("newFile.txt");

字符串工具(StrUtil)

继承自 StringUtils,增强字符串处理:

String result = StrUtil.format("{}你好,欢迎使用{}", "用户", "Hutool");
boolean blank = StrUtil.isBlank(str);
String trimmed = StrUtil.trim("  hello  ");

反射工具(ReflectUtil)

简化反射调用:

Object obj = ReflectUtil.newInstance(MyClass.class);
Method method = ReflectUtil.getMethod(obj, "doSomething");
Object result = ReflectUtil.invoke(obj, method, params);

压缩解压(ZipUtil)

一行代码完成压缩:

ZipUtil.zip("sourceFolder", "output.zip");
ZipUtil.unzip("archive.zip", "targetFolder");

身份证验证(IdcardUtil)

支持大陆、港澳台身份证格式校验:

boolean valid = IdcardUtil.isValidCard("110101199001011234");
String province = IdcardUtil.getProvinceByIdCard(idCard);

动态字典(Dict)

支持灵活类型键的 Map 实现:

Dict data = Dict.create()
    .set("username", "admin")
    .set("age", 30)
    .set("active", true);
    
String name = data.getStr("username");
Integer age = data.getInt("age");

控制台输出(Console)

类似 JavaScript 的调试打印:

Console.log("执行结果: {}", result);
Console.error("错误信息: {}", errorMsg);

数据校验(Validator)

常用格式验证:

boolean isEmail = Validator.isEmail("test@domain.com");
boolean isMobile = Validator.isMobile("13800138000");
boolean isIp = Validator.isIp("192.168.1.1");

双向映射(BiMap)

支持正反双向查找:

BiMap<String, Integer> biMap = new BiMap<>();
biMap.put("one", 1);
biMap.put("two", 2);

Integer val = biMap.get("one");    // 1
String key = biMap.getKey(1);      // "one"

图片处理(ImgUtil)

基本图像操作:

File original = new File("photo.jpg");
ImgUtil.scale(original, new File("thumb.jpg"), 0.5f);
ImgUtil.pressText(original, "水印文字", Color.RED);

配置文件(Setting)

支持中文键的配置文件读取:

Setting config = new Setting("app.setting");
String value = config.getStr("database.url");

日志抽象(LogFactory)

统一日志门面,兼容多种实现:

Log log = LogFactory.get();
log.info("应用启动");
log.error("操作失败", exception);

缓存实现(CacheUtil)

多种缓存策略:

Cache<String, User> cache = CacheUtil.newFIFOCache(100);
cache.put("user:1", user1);
User cached = cache.get("user:1");

加密工具(SecureUtil)

常用加密算法封装:

AES aes = SecureUtil.aes(key.getBytes());
String encrypted = aes.encryptHex(plainText);
String decrypted = aes.decryptStr(encrypted);

更多工具集

工具类 功能
MailUtil 邮件发送
QrCodeUtil 二维码生成解析
EmojiUtil Emoji 表情处理
HttpUtil HTTP 请求
ReUtil 正则表达式

模块速查表

分类 关键类 说明
类型转换 Convert 各类类型互转
日期时间 DateUtil 日期解析格式化
文件IO FileUtilIoUtil 文件与流操作
字符串 StrUtil 字符串处理
反射 ReflectUtil 反射调用
压缩 ZipUtil ZIP压缩解压
验证 Validator 格式校验
缓存 CacheUtil 多种缓存策略
加密 SecureUtil 对称非对称加密
标签: Java

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。