Java 求数组list共有的元素

Posted Roam-G

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求数组list共有的元素相关的知识,希望对你有一定的参考价值。

 

String[] string1 = "a", "d", "k", "f";
String[] string2 = "a", "c", "d", "g", "f";

求两个数组的共有元素

我们通常会遇到需要求两个数组中共同的元素,普通的方法就是利用两个for循环就可以得到结果,但是一般不建议这样写。下面我们来探讨一下,更多的方法来解决这个问题。

总体来看,感觉都没有那种直接可以调用的方法来使用,比如Python中就会提供一些直接求两个list的这种共有的元素,以及交集并集。

 Java中还是需要避免不了for循环。

如果你有更好的方法,欢迎推荐。

        String[] string1 = "a", "d", "k", "f";
        String[] string2 = "a", "c", "d", "g", "f";
        System.out.println("两个数组共有的元素: ");
        System.out.println("method 1 --");
        for (String str : string1) 
            for (String e : string2) 
                if (str.equals(e)) 
//                    共有的,
                    System.out.println(str);
                    break;
                
            
        
        System.out.println("method 2 =======/*网上看到的方法,亲自测试是有错误的! */========");

        for (String str : string1) 
//            先循环数组1,看看能不能再数组2中找到。 >=表示相同,< 不同
//            有相同值才会返回该元素,  采用二分搜索法来搜索指定数组。
            if (Arrays.binarySearch(string2, str) >= 0) 
                System.out.println(str);
            
        
        System.out.println("method 3 --都插入到set中,后者能插入成功的是s2独有,失败的是共有的");
        Set<String> stringSet = new HashSet<String>();
        for (String s1 : string1) 
            stringSet.add(s1);
        
//        string1已经都插入到set,string2不能查进去的就是string2独有的
        for (String s2 : string2) 
            if (stringSet.add(s2)) 
                System.out.println(s2 + " string2 独有的");
             else 
                System.out.println(s2 + " 共有的");
            
        

        System.out.println("method 4 --利用list的contains");
//        List<String> stringList = new ArrayList<String>(string1);
//        把数组转化为list
        List<String> stringList = Arrays.asList(string1);
//        循环数组2
        for (String s2 : string2) 
            if (stringList.contains(s2)) 
                System.out.println("共有的 " + s2);
             else 
                System.out.println("s2独有的 " + s2);
            
        

 

以上是关于Java 求数组list共有的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何求两个数组的交集??

7-4 找出不是两个数组共有的元素(20 分)

[PTA]练习7-4 找出不是两个数组共有的元素

实验7-1-4-一维数组 找出不是两个数组共有的元素 (20 分)

[PTA]实验7-1-4 找出不是两个数组共有的元素

求包含每个有序数组(共k个)至少一个元素的最小区间