日常开发中,Arrays
、Collections
和 Objects
是非常实用的工具类,提供了丰富的功能,从而可以更高效地处理数组、集合和对象。本文将详细介绍这三个工具类的重要知识细节。
本文目录
- 一、 Arrays
- 数组转集合
- 并行排序优化
- Stream 支持
- 二、 Collections
- 同步包装
- 排序与查找
- 三、 Objects
- 空安全比较
- 参数校验
- 空值链式处理
- 性能对比
- 总结
一、 Arrays
数组转集合
将数组转换为集合是一个常见的操作,但需要注意的是,Arrays.asList()
返回的 List
是固定大小的,不支持 add
和 remove
操作。
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进阶——注解一文全懂 → |