Common elements in two lists

后端 未结 14 802
无人共我
无人共我 2020-11-22 12:22

I have two ArrayList objects with three integers each. I want to find a way to return the common elements of the two lists. Has anybody an idea how I can achiev

相关标签:
14条回答
  • 2020-11-22 12:42

    consider two list L1 ans L2

    Using Java8 we can easily find it out

    L1.stream().filter(L2::contains).collect(Collectors.toList())

    0 讨论(0)
  • 2020-11-22 12:42
    public static <T> List<T> getCommonElements(
                java.util.Collection<T> a,
                java.util.Collection<T> b
                ) {
            if(a==null && b==null) return new ArrayList<>();
            if(a!=null && a.size()==0) return new ArrayList<>(b);           
            if(b!=null && b.size()==0) return new ArrayList<>(a);
            
            Set<T> set= a instanceof HashSet?(HashSet<T>)a:new HashSet<>(a);
            return b.stream().filter(set::contains).collect(Collectors.toList());
        }
    

    For better time performance, please use HashSet (O(1) look up) instead of List(O(n) look ups)

    Time complexity- O(b) Space Complexity- O(a)

    0 讨论(0)
  • 2020-11-22 12:44

    Using Java 8's Stream.filter() method in combination with List.contains():

    import static java.util.Arrays.asList;
    import static java.util.stream.Collectors.toList;
    
    /* ... */
    
    List<Integer> list1 = asList(1, 2, 3, 4, 5);
    List<Integer> list2 = asList(1, 3, 5, 7, 9);
    
    List<Integer> common = list1.stream().filter(list2::contains).collect(toList());
    
    0 讨论(0)
  • 2020-11-22 12:45

    In case you want to do it yourself..

    List<Integer> commons = new ArrayList<Integer>();
    
    for (Integer igr : group1) {
        if (group2.contains(igr)) {
            commons.add(igr);
        }
    }
    
    System.out.println("Common elements are :: -");
    for (Integer igr : commons) {
        System.out.println(" "+igr);
    }
    
    0 讨论(0)
  • 2020-11-22 12:47

    You can use set intersection operations with your ArrayList objects.

    Something like this:

    List<Integer> l1 = new ArrayList<Integer>();
    
    l1.add(1);
    l1.add(2);
    l1.add(3);
    
    List<Integer> l2= new ArrayList<Integer>();
    l2.add(4);
    l2.add(2);
    l2.add(3);
    
    System.out.println("l1 == "+l1);
    System.out.println("l2 == "+l2);
    
    List<Integer> l3 = new ArrayList<Integer>(l2);
    l3.retainAll(l1);
    
        System.out.println("l3 == "+l3);
    

    Now, l3 should have only common elements between l1 and l2.

    CONSOLE OUTPUT
    l1 == [1, 2, 3]
    l2 == [4, 2, 3]
    l3 == [2, 3]
    
    0 讨论(0)
  • 2020-11-22 12:49

    You can get the common elements between two lists using the method "retainAll". This method will remove all unmatched elements from the list to which it applies.

    Ex.: list.retainAll(list1);
    

    In this case from the list, all the elements which are not in list1 will be removed and only those will be remaining which are common between list and list1.

    List<Integer> list = new ArrayList<>();
    list.add(10);
    list.add(13);
    list.add(12);
    list.add(11);
    
    List<Integer> list1 = new ArrayList<>();
    list1.add(10);
    list1.add(113);
    list1.add(112);
    list1.add(111);
    //before retainAll
    System.out.println(list);
    System.out.println(list1);
    //applying retainAll on list
    list.retainAll(list1);
    //After retainAll
    System.out.println("list::"+list);
    System.out.println("list1::"+list1);
    

    Output:

    [10, 13, 12, 11]
    [10, 113, 112, 111]
    list::[10]
    list1::[10, 113, 112, 111]
    

    NOTE: After retainAll applied on the list, the list contains common element between list and list1.

    0 讨论(0)
提交回复
热议问题