CollectionUtils

使用 CollectionUtils 类的常用方法

在Java开发中,我们经常需要对集合进行各种操作,而Apache Commons Collections库提供了一个方便的工具类 CollectionUtils,其中包含了许多实用的方法。在这篇博客中,我们将深入了解一些常用的方法,并提供详细的示例。

1. isEmpty

java 复制代码
// Check if a list is empty
List<String> emptyList = new ArrayList<>();
boolean isEmpty = CollectionUtils.isEmpty(emptyList);
System.out.println("Is the list empty? " + isEmpty);//Is the list empty? true

这个方法用于检查给定的集合是否为空。在上面的例子中,我们创建了一个空的 ArrayList,然后使用 isEmpty 方法检查它是否为空,最后打印结果。

2. isNotEmpty

java 复制代码
// Check if a list is not empty
List<String> nonEmptyList = Arrays.asList("item1", "item2");
boolean isNotEmpty = CollectionUtils.isNotEmpty(nonEmptyList);
System.out.println("Is the list not empty? " + isNotEmpty);//Is the list empty? true

isEmpty 相反,isNotEmpty 方法用于检查集合是否不为空。我们创建了一个包含一些元素的列表,并使用 isNotEmpty 方法进行检查。

isEmptyisNotEmpty

  • 时间复杂度: O(1) - 常数时间。这是因为这两个方法只需检查集合是否为 null 或其大小是否为零。
  • 适用场景: 用于快速检查集合是否为空。

3. size

java 复制代码
// Get the size of a list
int size = CollectionUtils.size(nonEmptyList);
System.out.println("Size of the list: " + size);//Size of the list: 2

size 方法返回给定集合的大小。在这个例子中,我们获取了之前非空列表的大小并打印输出。

size

  • 时间复杂度: O(1) - 常数时间。这是因为 size 方法通常由集合实现提供,直接返回已存储的大小。
  • 适用场景: 适用于快速获取集合的大小。

4. addAll

java 复制代码
// Merge two lists
List<String> destinationList = new ArrayList<>();
CollectionUtils.addAll(destinationList, "item3", "item4");
System.out.println("Merged list: " + destinationList);//Merged list: [item3, item4]

addAll 方法用于将一个集合的所有元素添加到另一个集合中。在这里,我们创建了一个目标列表,并使用 addAll 将两个元素添加到这个列表中。

addAll

  • 时间复杂度: O(n) - 线性时间,其中 n 是要添加的元素数量。
  • 适用场景: 用于将一个集合的所有元素添加到另一个集合。在元素数量较大时可能会影响性能。

5. removeAll

java 复制代码
// Remove elements from a list
CollectionUtils.removeAll(destinationList, "item3");
System.out.println("List after removal: " + destinationList);//List after removal: []

removeAll 方法用于从集合中移除指定的元素。在这个例子中,我们从目标列表中移除了一个元素,并打印输出修改后的列表。

removeAll

  • 时间复杂度: O(n) - 线性时间,其中 n 是要移除的元素数量。
  • 适用场景: 用于从集合中移除指定的元素。

6. intersection

java 复制代码
// Get the intersection of two lists
List<String> list1 = Arrays.asList("apple", "orange", "banana");
List<String> list2 = Arrays.asList("banana", "kiwi", "apple");
List<String> intersection = (List<String>) CollectionUtils.intersection(list1, list2);
System.out.println("Intersection of lists: " + intersection);//Intersection of lists: [banana, apple]

intersection 方法返回两个集合的交集。在这里,我们创建了两个包含水果的列表,并使用 intersection 方法获取它们的交集。

7. union

java 复制代码
// Get the union of two lists
List<String> union = (List<String>) CollectionUtils.union(list1, list2);
System.out.println("Union of lists: " + union);//Union of lists: [apple, orange, banana, kiwi]

union 方法返回两个集合的并集。在这个例子中,我们使用 union 方法获取两个水果列表的并集。

8. disjunction

java 复制代码
// Get the disjunction of two lists
List<String> disjunction = (List<String>) CollectionUtils.disjunction(list1, list2);
System.out.println("Disjunction of lists: " + disjunction);//Disjunction of lists: [orange, kiwi]

disjunction 方法返回两个集合的互斥集合,即不属于交集的部分。在这里,我们使用 disjunction 方法获取两个列表的互斥部分。

9. subtract

java 复制代码
// Subtract one list from another
CollectionUtils.subtract(list1, list2);
System.out.println("List1 after subtracting list2: " + list1);//List1 after subtracting list2: [orange]

subtract 方法用于从第一个集合中移除第二个集合中包含的元素。在这个例子中,我们使用 subtract 方法从 list1 中移除了与 list2 重叠的元素。

subtract

  • 时间复杂度: O(m + n) - 线性时间,其中 m 和 n 分别是两个集合的大小。
  • 适用场景: 用于从一个集合中移除另一个集合包含的元素。

10. filter

java 复制代码
// Filter elements based on a condition
List<String> filteredList = (List<String>) CollectionUtils.select(list1, s -> s.startsWith("a"));
System.out.println("Filtered list: " + filteredList);//Filtered list: [apple]

filter 方法根据给定的条件保留集合中的元素。在这里,我们使用 filter 方法保留了以字母 "a" 开头的元素。

filter

  • 时间复杂度: O(n) - 线性时间,其中 n 是集合的大小。
  • 适用场景: 用于根据条件筛选集合中的元素。

11. transform

java 复制代码
// Transform elements in a list
List<Integer> lengths = (List<Integer>) CollectionUtils.collect(list1, String::length);
System.out.println("Lengths of items in the list: " + lengths);//Lengths of items in the list: [5, 6, 6]

transform 方法用于对集合中的元素进行转换。在这个例子中,我们使用 transform 方法获取了 list1 中每个字符串元素的长度,并将结果存储在 lengths 列表中。

transform

  • 时间复杂度: O(n) - 线性时间,其中 n 是集合的大小。
  • 适用场景: 用于对集合中的元素进行转换。

12. countMatches

java 复制代码
// Count elements that match a condition
long count = CollectionUtils.countMatches(list1, s -> s.length() > 5);
System.out.println("Number of items with length > 5: " + count);//Number of items with length > 5: 2

countMatches 方法用于计算满足特定条件的元素数量。在这个例子中,我们计算了 list1 中长度大于 5 的元素的数量。

countMatches

  • 时间复杂度: O(n) - 线性时间,其中 n 是集合的大小。
  • 适用场景: 用于计算满足特定条件的元素数量。
相关推荐
测开小菜鸟1 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity2 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天2 小时前
java的threadlocal为何内存泄漏
java
caridle2 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^2 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋33 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花3 小时前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端3 小时前
第六章 7.0 LinkList
java·开发语言·网络
Wx-bishekaifayuan3 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer083 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源