美文网首页
java判断两个集合是否有相同元素Collections.dis

java判断两个集合是否有相同元素Collections.dis

作者: 远古程序猿 | 来源:发表于2019-10-08 14:44 被阅读0次

    Java接口定义

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

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

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

    代码的设计思想:

    • c1是Set则遍历c2,这样做的意图是因为Set的contains方法效率更高,Set本质是只有key没有value的Map,调用contains方法时其实调用的是map.containsKey()方法。
    • c1和c2都不是Set情况下,如果两个collcoection没有元素返回true,如果存在一个以上collcoection大小大于零,遍历较小的集合,这样做可以提升遍历速度。注释中还给了理论案例,比较好理解。

    测试代码示例

    List<String> list1 = new ArrayList<String>();
            list1.add("111");
            list1.add("222");
            list1.add("333");
            list1.add("444");
    
            List<String> list2 = new Vector<String>();
            list2.add("444");
            list2.add("555");
    
            List list3 = new LinkedList();
            list3.add(111);
            list3.add("~~~");
    
            Set<String> list4 = new HashSet<String>();
            list4.add("888");
            list4.add("999");
    
            Set<String> list5 = new HashSet<String>();
            list5.add("www");
            list5.add(null);
    
            List list6 = new ArrayList();
    
            List list7 = new ArrayList();
    
            Set<String> 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是否有相同元素 : 否
    

    相关文章

      网友评论

          本文标题:java判断两个集合是否有相同元素Collections.dis

          本文链接:https://www.haomeiwen.com/subject/kpfjyctx.html