Compare two ArrayList and remove duplicates 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.

    import java.util.ArrayList;

    public class GFG {

        public static void main(String[] args)

        {

            ArrayList

                list1 = new ArrayList();

            list1.add("Hii");

            list1.add("Geeks");

            list1.add("for");

            list1.add("Geeks");

            System.out.println("List1: "

                               + list1);

            ArrayList

                list2 = new ArrayList();

            list2.add("Hii");

            list2.add("Geeks");

            list2.add("Gaurav");

            System.out.println("List2: "

                               + list2);

            list1.retainAll(list2);

            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.

    import java.util.ArrayList;

    public class GFG {

        public static void main(String[] args)

        {

            ArrayList

                list1 = new ArrayList();

            list1.add("Hii");

            list1.add("Geeks");

            list1.add("for");

            list1.add("Geeks");

            System.out.println("List1: "

                               + list1);

            ArrayList

                list2 = new ArrayList();

            list2.add("Hii");

            list2.add("Geeks");

            list2.add("Gaurav");

            System.out.println("List2: "

                               + list2);

            ArrayList

                list3 = new ArrayList(list1);

            list3.retainAll(list2);

            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:

    import java.util.*;

    import java.util.stream.*;

    public class GFG {

        public static void main(String[] args)

        {

            ArrayList

                list1 = new ArrayList();

            list1.add("Hii");

            list1.add("Geeks");

            list1.add("for");

            list1.add("Geeks");

            System.out.println("List1: "

                               + list1);

            ArrayList

                list2 = new ArrayList();

            list2.add("Hii");

            list2.add("Geeks");

            list2.add("Gaurav");

            System.out.println("List2: "

                               + list2);

            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:

    import java.util.ArrayList;

    public class GFG {

        public static void main(String[] args)

        {

            ArrayList

                list1 = new ArrayList();

            list1.add("Hii");

            list1.add("Geeks");

            list1.add("for");

            list1.add("Geeks");

            System.out.println("List1: "

                               + list1);

            ArrayList

                list2 = new ArrayList();

            list2.add("Hii");

            list2.add("Geeks");

            list2.add("Gaurav");

            System.out.println("List2: "

                               + list2);

            ArrayList

                list3 = new ArrayList();

            for (String temp : list1) {

                if (list2.contains(temp)) {

                    list3.add(temp);

                }

            }

            System.out.println("Common elements: "

                               + list3);

        }

    }

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


Practice Tags :