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