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 :

Video liên quan

Chủ Đề