Skip to content
Related Articles

Related Articles

Find common elements in two ArrayLists in Java
  • Last Updated : 11 Dec, 2018


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.




    // 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);
        }
    }
    Output:
    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    

    Program 2: By retaining the contents of List1.




    // 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);
        }
    }
    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:




    // 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()));
        }
    }
    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:




    // 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);
        }
    }
    Output:
    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    

    Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

    My Personal Notes arrow_drop_up
Recommended Articles
Page :