Java进阶——常用工具类

日常开发中,ArraysCollectionsObjects 是非常实用的工具类,提供了丰富的功能,从而可以更高效地处理数组、集合和对象。本文将详细介绍这三个工具类的重要知识细节。

本文目录

一、 Arrays

数组转集合

将数组转换为集合是一个常见的操作,但需要注意的是,Arrays.asList() 返回的 List 是固定大小的,不支持 addremove 操作。

java 复制代码
String[] skus = {"A001", "B002"};
List<String> skuList = Arrays.asList(skus); 
// 不支持 add/remove
skuList.add("C003"); // 抛出 UnsupportedOperationException
并行排序优化

当处理大量数据时,Arrays.parallelSort() 可以利用多核并行排序,比串行排序快 2 - 3 倍。

java 复制代码
int[] orderAmounts = getLargeOrderData(); // 假设有10 万+数据
Arrays.parallelSort(orderAmounts); // 多核并行排序
Stream 支持

Arrays.stream() 可以将数组转换为流,方便进行各种流操作。

java 复制代码
// 统计订单数量
long bigOrders = Arrays.stream(orderAmounts)
                       .filter(amount -> amount > 10000)
                       .count();

二、 Collections

同步包装

Collections.synchronizedList() 可以创建线程安全的集合,但遍历时仍需手动同步。

java 复制代码
// 创建线程安全的购物车
List<CartItem> cart = Collections.synchronizedList(new ArrayList<>());
synchronized(cart) {
    for (CartItem item : cart) {
        processItem(item);
    }
}
排序与查找

Collections.sort() 可以对集合进行排序,Collections.binarySearch() 可以进行二分查找,但二分查找前必须先排序。

java 复制代码
// 按价格排序商品
List<Product> products = getProducts();
Collections.sort(products, Comparator.comparing(Product::getPrice));

// 二分查找
int index = Collections.binarySearch(products, targetProduct, priceComparator);

三、 Objects

空安全比较

Objects.equals() 可以自动处理 null 值,避免 NullPointerException

java 复制代码
public boolean isSameUser(User u1, User u2) {
    return Objects.equals(u1.getUserId(), u2.getUserId()); 
    // 自动处理 null 值
}
参数校验

Objects.requireNonNull() 可以对参数进行非空校验,Objects.requireNonNullElse() 可以自定义空值异常消息。

java 复制代码
public void processOrder(Order order) {
    Objects.requireNonNull(order, "订单不能为 null");
    // 其他处理...
}

// 自定义空值异常消息
String address = Objects.requireNonNullElse(
    user.getAddress(), 
    "默认地址"
);
空值链式处理

Objects.requireNonNullElse() 可以进行多层空值防护。

java 复制代码
// 获取用户所在城市(多层空值防护)
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进阶------注解一文全懂 → |

相关推荐
S***267524 分钟前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)43 分钟前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL1 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
V***u4531 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿2 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t9192 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***08292 小时前
【监控】spring actuator源码速读
java·spring boot·spring
麦麦鸡腿堡2 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
vx_dmxq2112 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php
5***g2983 小时前
新手如何快速搭建一个Springboot项目
java·spring boot·后端