Java如何操作集合中的多个元素(批量操作)
前言
在前面我们学习了针对单个元素的基本操作,
接下来,我们看看如何对一组元素进行批量处理!
Java 的 Collection 接口提供了四个非常重要的方法,它们分别对应了集合的四大基本运算:
| 方法 | 集合运算 | 作用 |
|---|---|---|
containsAll(Collection<?> c) | 包含(包含关系) | 判断当前集合是否包含另一个集合的所有元素 |
addAll(Collection<? extends E> c) | 并集(union) | 将另一个集合的所有元素添加到当前集合 |
removeAll(Collection<?> c) | 补集(complement) | 移除当前集合中出现在另一个集合中的所有元素 |
retainAll(Collection<?> c) | 交集(intersection) | 仅保留当前集合中也存在于另一个集合中的元素 |
1. containsAll()—— 检查是否完全包含另一个集合
containsAll(Collection<?> c)方法会返回true,如果当前集合包含了另一个集合的所有元素。- 两个集合的类型可以不同,比如:可以检查一个
Collection<String>是否包含一个Collection<User>的元素。
示例:使用containsAll()
import java.util.*;
public class ContainsAllExample {
public static void main(String[] args) {
Collection<String> strings = new ArrayList<>();
strings.add("one");
strings.add("two");
strings.add("three");
Collection<String> first = new ArrayList<>();
first.add("one");
first.add("two");
Collection<String> second = new ArrayList<>();
second.add("one");
second.add("four");
System.out.println("Is first contained in strings? " + strings.containsAll(first));
System.out.println("Is second contained in strings? " + strings.containsAll(second));
}
}
输出结果:
Is first contained in strings? true Is second contained in strings? false
2. addAll()—— 将另一个集合的元素添加进来(并集操作)
addAll(Collection<? extends E> c)将传入集合的所有元素添加到当前集合。- 返回值
true表示:当前集合发生了变化(不代表全部成功添加,只要有变化就返回true)。
示例:使用addAll()
import java.util.*;
public class AddAllExample {
public static void main(String[] args) {
Collection<String> strings = new ArrayList<>();
strings.add("one");
strings.add("two");
strings.add("three");
Collection<String> first = new ArrayList<>();
first.add("one");
first.add("four");
boolean hasChanged = strings.addAll(first);
System.out.println("Has strings changed? " + hasChanged);
System.out.println("strings = " + strings);
}
}
输出结果:
Has strings changed? true strings = [one, two, three, one, four]
小提示:
如果使用HashSet等不允许重复元素的集合,addAll()的行为会不同——不会添加重复元素!
3. removeAll()—— 移除另一个集合中存在的元素(补集操作)
removeAll(Collection<?> c)方法会删除当前集合中所有在传入集合中也存在的元素。- 返回值
true表示集合有变化。
示例:使用removeAll()
import java.util.*;
public class RemoveAllExample {
public static void main(String[] args) {
Collection<String> strings = new ArrayList<>();
strings.add("one");
strings.add("two");
strings.add("three");
Collection<String> toBeRemoved = new ArrayList<>();
toBeRemoved.add("one");
toBeRemoved.add("four");
boolean hasChanged = strings.removeAll(toBeRemoved);
System.out.println("Has strings changed? " + hasChanged);
System.out.println("strings = " + strings);
}
}
输出结果:
Has strings changed? true strings = [two, three]
4. retainAll()—— 保留两者共有的元素(交集操作)
retainAll(Collection<?> c)方法只保留当前集合中也在传入集合中出现的元素,其他的都移除。- 返回值
true表示集合内容发生了变化。
示例:使用retainAll()
import java.util.*;
public class RetainAllExample {
public static void main(String[] args) {
Collection<String> strings = new ArrayList<>();
strings.add("one");
strings.add("two");
strings.add("three");
Collection<String> toBeRetained = new ArrayList<>();
toBeRetained.add("one");
toBeRetained.add("four");
boolean hasChanged = strings.retainAll(toBeRetained);
System.out.println("Has strings changed? " + hasChanged);
System.out.println("strings = " + strings);
}
}
输出结果:
Has strings changed? true strings = [one]
总结
| 方法 | 说明 | 示例 |
|---|---|---|
containsAll() | 检查包含关系 | list.containsAll(subList) |
addAll() | 合并两个集合(并集) | list.addAll(otherList) |
removeAll() | 移除交集元素(补集) | list.removeAll(otherList) |
retainAll() | 只保留交集元素(交集) | list.retainAll(otherList) |
到此这篇关于Java如何操作集合中的多个元素的文章就介绍到这了,更多相关Java操作集合多个元素内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java 的 FileFilter文件过滤与readline读行操作实例代码
这篇文章介绍了Java 的 FileFilter文件过滤与readline读行操作实例代码,有需要的朋友可以参考一下2013-09-09
Java Stream中的Spliterator类概念及原理解析
Spliterator是Java 8引入的一个接口,位于java.util包中,它结合了迭代器(Iterator)的遍历能力和分割器(Splitter)的分割能力,本文将详细介绍Spliterator的概念、原理、作用、类中定义的关键方法,以及它在Stream API中的实际应用,感兴趣的朋友一起看看吧2024-08-08
线程池满Thread pool exhausted排查和解决方案
这篇文章主要介绍了线程池满Thread pool exhausted排查和解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-11-11
解决多模块项目中Mybatis的Mapper内部方法找不到的问题
这篇文章主要介绍了解决多模块项目中Mybatis的Mapper内部方法找不到的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-11-11
Netty分布式ByteBuf使用directArena分配缓冲区过程解析
这篇文章主要介绍了Netty分布式ByteBuf使用directArena分配缓冲区过程解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-03-03
mybatis创建项目报Invalid bound statement (not found)错误解决方法
使用MyBatis能够帮助我们将SQL语句和Java代码分离,这篇文章主要给大家介绍了关于mybatis创建项目报Invalid bound statement (not found)错误的解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2023-05-05
springboot的yml配置文件通过db2的方式整合mysql的教程
这篇文章主要介绍了springboot的yml配置文件通过db2的方式整合mysql的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-09-09
SpringCloud中的熔断监控HystrixDashboard和Turbine示例详解
HystrixDashboard是用于实时监控Hystrix性能的工具,展示请求响应时间和成功率等数据,本文介绍了如何配置和使用HystrixDashboard和Turbine进行熔断监控,包括依赖添加、启动类配置和测试流程,感兴趣的朋友一起看看吧2024-09-09


最新评论