java disjoint_java判断两个集合是否有相同元素Collections.disjoint()

本文详细介绍了Java中Collections.disjoint()方法的实现原理,该方法用于判断两个集合是否没有交集。通过源码分析,揭示了当一个集合为Set时,利用其高效的contains()方法提高判断速度。此外,文章还提供了测试用例展示方法的正确性和效率,并指出在处理空集合时可能引发的空指针异常。
摘要由CSDN通过智能技术生成

Java接口定义

disjoint(Collection> c1, Collection> c2) 方法返回true表示两个collection中没有相同的元素。

disjoint()方法不需要传入类型相同的集合,只要实现collection接口即可。如果 c1 集合和 c2 集合没有相同元素返回true。如果传入参数为 null 会引发空指针异常。

disjoint在判断过程中对执行速度做了优化,因此比我们直接遍历两个list的效率要更高,尤其是第一个Collection为Set的情况下。具体实现逻辑,简单过一下源码:

2cef01231520

代码的设计思想:

c1是Set则遍历c2,这样做的意图是因为Set的contains方法效率更高,Set本质是只有key没有value的Map,调用contains方法时其实调用的是map.containsKey()方法。

c1和c2都不是Set情况下,如果两个collcoection没有元素返回true,如果存在一个以上collcoection大小大于零,遍历较小的集合,这样做可以提升遍历速度。注释中还给了理论案例,比较好理解。

测试代码示例

List list1 = new ArrayList();

list1.add("111");

list1.add("222");

list1.add("333");

list1.add("444");

List list2 = new Vector();

list2.add("444");

list2.add("555");

List list3 = new LinkedList();

list3.add(111);

list3.add("~~~");

Set list4 = new HashSet();

list4.add("888");

list4.add("999");

Set list5 = new HashSet();

list5.add("www");

list5.add(null);

List list6 = new ArrayList();

List list7 = new ArrayList();

Set list8 = null;

System.out.println("list1和list2是否有相同元素 : " + (Collections.disjoint(list1, list2) ? "否" : "是"));

System.out.println("list1和list3是否有相同元素 : " + (Collections.disjoint(list1, list3) ? "否" : "是"));

System.out.println("list1和list2是否有相同元素 : " + (Collections.disjoint(list1, list4) ? "否" : "是"));

System.out.println("list1和list2是否有相同元素 : " + (Collections.disjoint(list4, list5) ? "否" : "是"));

System.out.println("list6和list7是否有相同元素 : " + (Collections.disjoint(list6, list7) ? "否" : "是"));

//下面代码引发空指针异常

// System.out.println("list1和list2是否有相同元素 : " + (Collections.disjoint(list4, list8) ? "否" : "是"));

结果

list1和list2是否有相同元素 : 是

list1和list3是否有相同元素 : 否

list1和list4是否有相同元素 : 否

list4和list5是否有相同元素 : 否

list6和list7是否有相同元素 : 否

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值