Find common elements in two ArrayLists in Java


Prerequisite: ArrayList in Java

Given two ArrayLists, the task is to print all common elements in both the ArrayLists in Java .

Examples:



Input: List1 = ["Hii", "Geeks", "for", "Geeks"], 
       List2 = ["Hii", "Geeks", "Gaurav"]
Output: [Hii, Geeks, Geeks]

Input: List1 = ["a", "b", "c", "d", "e", "f"], 
       List2 = ["b", "d", "e", "h", "g", "c"]
Output:[b, c, d, e]
  1. Using Collections.retainAll() method

    Syntax:

    Collections1.retainAll(Collections2)
    
    This method keeps only the common elements
    of both Collection in Collection1.
    

    Approach:

    1. Get the two ArrayLists.
    2. Find the common elements in both the Lists using Collection.retainAll() method. This method keeps only the common elements of both Collection in Collection1.
    3. The List 1 now contains the common elements only.

    Below is the implementation of the above approach:
    Program: By modifying the contents of List1.

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java Program to find common elements
    // in two ArrayLists
    // Using retainAll() method
      
    // import ArrayList package
    import java.util.ArrayList;
      
    public class GFG {
      
        // main method
        public static void main(String[] args)
        {
      
            // create ArrayList list1
            ArrayList<String>
                list1 = new ArrayList<String>();
      
            // Add values in ArrayList
            list1.add("Hii");
            list1.add("Geeks");
            list1.add("for");
            list1.add("Geeks");
      
            // print list 1
            System.out.println("List1: "
                               + list1);
      
            // Create ArrayList list2
            ArrayList<String>
                list2 = new ArrayList<String>();
      
            // Add values in ArrayList
            list2.add("Hii");
            list2.add("Geeks");
            list2.add("Gaurav");
      
            // print list 2
            System.out.println("List2: "
                               + list2);
      
            // Find the common elements
            list1.retainAll(list2);
      
            // print list 1
            System.out.println("Common elements: "
                               + list1);
        }
    }

    chevron_right

    
    

    Output:

    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    

    Program 2: By retaining the contents of List1.

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java Program to find common elements
    // in two ArrayLists
    // Using retainAll() method
      
    // import ArrayList package
    import java.util.ArrayList;
      
    public class GFG {
      
        // main method
        public static void main(String[] args)
        {
      
            // create ArrayList list1
            ArrayList<String>
                list1 = new ArrayList<String>();
      
            // Add values in ArrayList
            list1.add("Hii");
            list1.add("Geeks");
            list1.add("for");
            list1.add("Geeks");
      
            // print list 1
            System.out.println("List1: "
                               + list1);
      
            // Create ArrayList list2
            ArrayList<String>
                list2 = new ArrayList<String>();
      
            // Add values in ArrayList
            list2.add("Hii");
            list2.add("Geeks");
            list2.add("Gaurav");
      
            // print list 2
            System.out.println("List2: "
                               + list2);
      
            // Create ArrayList list3
            ArrayList<String>
                list3 = new ArrayList<String>(list1);
      
            // Store the comparison output
            // in ArrayList list3
            list3.retainAll(list2);
      
            // print list 3
            System.out.println("Common elements: "
                               + list3);
        }
    }

    chevron_right

    
    

    Output:

    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    
  2. Using Stream filter

    Syntax:

    list1.stream()
        .filter(list2::contains)
        .collect(Collectors
        .toList()));
    
    This method returns element if found in second list.
    

    Approach:

    1. First create two ArrayList and add values of list.
    2. Convert the ArrayList to Stream using stream() method.
    3. Set the filter condition to be distinct using contains() method.
    4. Collect the filtered values as List using collect() method. This list will be return common element in both list.
    5. Print list3

    Below is the implementation of the above approach:

    Program:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java Program to find common elements
    // in two ArrayLists
    // Using  Stream filter method
      
    // import ArrayList package
    import java.util.*;
    import java.util.stream.*;
      
    public class GFG {
      
        // main method
        public static void main(String[] args)
        {
      
            // create ArrayList list1
            ArrayList<String>
                list1 = new ArrayList<String>();
      
            // Add values in ArrayList
            list1.add("Hii");
            list1.add("Geeks");
            list1.add("for");
            list1.add("Geeks");
      
            // print list 1
            System.out.println("List1: "
                               + list1);
      
            // Create ArrayList list2
            ArrayList<String>
                list2 = new ArrayList<String>();
      
            // Add values in ArrayList
            list2.add("Hii");
            list2.add("Geeks");
            list2.add("Gaurav");
      
            // print list 2
            System.out.println("List2: "
                               + list2);
      
            // Find common elements
            System.out.print("Common elements: ");
            System.out.println(list1.stream()
                                   .filter(list2::contains)
                                   .collect(Collectors
                                                .toList()));
        }
    }

    chevron_right

    
    

    Output:

    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    
  3. Naive approach:
    1. First create two ArrayList and add values of list.
    2. Create a temporary ArrayList to contain common elements.
    3. Iterate through the list1 and check if that element is present in the list2 using ArrayList.contains() method.
    4. If found, add it to the list3
    5. Print the common elements from list3

    Below is the implementation of the above approach:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java Program to find common elements
    // in two ArrayLists
    // Using  Stream filter method
      
    // import ArrayList package
    import java.util.ArrayList;
      
    public class GFG {
      
        // main method
        public static void main(String[] args)
        {
      
            // create ArrayList list1
            ArrayList<String>
                list1 = new ArrayList<String>();
      
            // Add values in ArrayList
            list1.add("Hii");
            list1.add("Geeks");
            list1.add("for");
            list1.add("Geeks");
      
            // print list 1
            System.out.println("List1: "
                               + list1);
      
            // Create ArrayList list2
            ArrayList<String>
                list2 = new ArrayList<String>();
      
            // Add values in ArrayList
            list2.add("Hii");
            list2.add("Geeks");
            list2.add("Gaurav");
      
            // print list 2
            System.out.println("List2: "
                               + list2);
      
            // Create ArrayList list3
            ArrayList<String>
                list3 = new ArrayList<String>();
      
            // Find common elements
            // while iterating through list1
            for (String temp : list1) {
      
                // Check if theis element is
                // present in list2 or not
                if (list2.contains(temp)) {
      
                    // Since present, add it to list3
                    list3.add(temp);
                }
            }
      
            // print common elements from list 3
            System.out.println("Common elements: "
                               + list3);
        }
    }

    chevron_right

    
    

    Output:

    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    


  4. My Personal Notes arrow_drop_up

    Strategy Path planning and Destination matters in success No need to worry about in between temporary failures

    If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

    Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.