retainAll方法用于保留两个集合的交集并修改原集合,返回是否发生修改。示例中list1.retainAll(list2)后仅保留共同元素3、4;Set操作同理,需注意元素的equals实现、NULL检查及List重复元素处理,使用时应先复制集合以保留原始数据。

在Java中,retainAll 方法用于保留当前集合与另一个集合的交集元素,即:只保留同时存在于两个集合中的元素。调用该方法后,原集合会被修改。
retainAll 基本语法
Boolean retainAll(Collection> c)
该方法从调用集合中移除所有不在参数集合 c 中的元素。执行后,集合仅包含交集部分。如果集合发生修改,返回 true,否则返回 false。
使用示例:List 保留交集
假设我们有两个 List 集合,想让第一个集合只保留和第二个集合共有的元素:
List
执行后,list1 被修改为仅包含 3 和 4,这两个元素是两个列表的交集。
立即学习“Java免费学习笔记(深入)”;
使用 Set 进行高效交集操作
Set 天然去重,适合做交集运算。例如:
Set
结果中只保留了共同存在的元素。注意:HashSet 不保证顺序,如需有序可用 LinkedHashSet。
注意事项
- retainAll 会直接修改原集合,如需保留原始数据,应先复制集合。
- 集合中的元素类型需正确实现 equals 方法,否则比较可能出错。
- 传入的集合不能为 null,否则抛出 NullPointerException。
- 对于 List,重复元素可能影响结果。retainAll 会根据实际存在情况保留匹配项。
基本上就这些。retainAll 是求交集的便捷方式,适用于 List、Set 等常见集合类型,理解其修改原集合的特性很重要。


