网站首页 > java教程 正文
网上很多资料使用retainAll,大致代码如下(这简直误认子弟):
Set<String> set1 = new HashSet<>();
set1.add("A");
set1.add("B");
Set<String> set2 = new HashSet<>();
set2.add("A");
set2.add("B");
boolean hasCommon = set1.retainAll(set2);
System.out.println("s1和s2是否有交集:" + hasCommon);
这简直误认子弟,我们看下retainAll源码的注解
Retains only the elements in this set that are contained in the specified collection (optional operation). In other words, removes from this set all of its elements that are not contained in the specified collection. If the specified collection is also a set, this operation effectively modifies this set so that its value is the intersection of the two sets.
Params:
c – collection containing elements to be retained in this set
Returns:
true if this set changed as a result of the call
Throws:
UnsupportedOperationException – if the retainAll operation is not supported by this set
ClassCastException – if the class of an element of this set is incompatible with the specified collection (optional)
NullPointerException – if this set contains a null element and the specified collection does not permit null elements (optional), or if the specified collection is null
See Also:
remove(Object)
大意是:从此集合中删除未包含在指定集合中的所有元素。如果指定的集合也是一个集合,则此操作有效地修改该集合,使其值是两个集合的交集。
也就是说,从set1 中删除set2中不包含的元素,有删除就返回True。
执行set1.retainAll(set2)以后,set1中剩余的为set1、set2的交集,但返回的结果是True、false并不表示是否有交集,而是表示过程中s1是否有删除元素。(也不知道这是是谁写的,dsx,无力吐槽他的思路)
所以,判断是否有交集需要根据set1执行后的结果,如果执行set1.retainAll(set2)后,set1.size()>0说明有交集,等于0说明没有交集
修改代码为:
Set<String> set1 = new HashSet<>();
set1.add("A");
set1.add("B");
Set<String> set2 = new HashSet<>();
set2.add("A");
set2.add("B");
boolean hasCommon = set1.retainAll(set2);
System.out.println("s1和s2是否有交集:" + (set1.size() > 0));
猜你喜欢
- 2024-09-19 “全栈2019”Java第一百一十二章:什么是闭包?
- 2024-09-19 从一道面试题说起:GET 请求能传图片吗?
- 2024-09-19 Java设计模式(二十):职责链模式(java责任链模式的应用场景)
- 2024-09-19 32位和64位的JVM应该用哪个?
- 2024-09-19 Mac下安装 JDK17(mac下安装nvm以及node)
- 2024-09-19 Java Web项目部署(二)——JDK、Tomcat
- 2024-09-19 Java Web项目部署(三)-MySQL8(javaweb连接mysql具体步骤)
- 2024-09-19 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
- 2024-09-19 win7下绿色版mysql-5.7.18winx64如何配置
- 2024-09-19 Java实现终止线程池中正在运行的定时任务
你 发表评论:
欢迎- 最近发表
-
- class版本不兼容错误原因分析(class更新)
- 甲骨文Oracle公司为Java的最新LTS版本做出改进
- 「版本发布」Minecraft Java开发版 1.19.4-pre1 发布
- java svn版本管理工具(svn软件版本管理)
- 我的世界1.8.10钻石在第几层(我的世界1.7.2钻石在哪层)
- Java开发高手必备:在电脑上轻松切换多个JDK版本
- 2022 年 Java 开发报告:Java 8 八年不到,开发者都在用什么?
- 开发java项目,选择哪个版本的JDK比较合适?
- Java版本选型终极指南:8 vs 17 vs 21特性对决!大龄程序员踩坑总结
- POI Excel导入(poi excel导入附件)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)