Find common elements in two ArrayLists in Java
Last Updated :
05 Dec, 2022
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]
- Using Collections.retainAll() method
Syntax:
Collections1.retainAll(Collections2)
This method keeps only the common elements
of both Collection in Collection1.
Approach:
- Get the two ArrayLists.
- Find the common elements in both the Lists using Collection.retainAll() method. This method keeps only the common elements of both Collection in Collection1.
- 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<String>
list1 = new ArrayList<String>();
list1.add( "Hii" );
list1.add( "Geeks" );
list1.add( "for" );
list1.add( "Geeks" );
System.out.println( "List1: "
+ list1);
ArrayList<String>
list2 = new ArrayList<String>();
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<String>
list1 = new ArrayList<String>();
list1.add( "Hii" );
list1.add( "Geeks" );
list1.add( "for" );
list1.add( "Geeks" );
System.out.println( "List1: "
+ list1);
ArrayList<String>
list2 = new ArrayList<String>();
list2.add( "Hii" );
list2.add( "Geeks" );
list2.add( "Gaurav" );
System.out.println( "List2: "
+ list2);
ArrayList<String>
list3 = new ArrayList<String>(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]
- Using Stream filter
Syntax:
list1.stream()
.filter(list2::contains)
.collect(Collectors
.toList()));
This method returns element if found in second list.
Approach:
- First create two ArrayList and add values of list.
- Convert the ArrayList to Stream using stream() method.
- Set the filter condition to be distinct using contains() method.
- Collect the filtered values as List using collect() method. This list will be return common element in both list.
- 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<String>
list1 = new ArrayList<String>();
list1.add( "Hii" );
list1.add( "Geeks" );
list1.add( "for" );
list1.add( "Geeks" );
System.out.println( "List1: "
+ list1);
ArrayList<String>
list2 = new ArrayList<String>();
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]
- Naive approach:
- First create two ArrayList and add values of list.
- Create a temporary ArrayList to contain common elements.
- Iterate through the list1 and check if that element is present in the list2 using ArrayList.contains() method.
- If found, add it to the list3
- 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<String>
list1 = new ArrayList<String>();
list1.add( "Hii" );
list1.add( "Geeks" );
list1.add( "for" );
list1.add( "Geeks" );
System.out.println( "List1: "
+ list1);
ArrayList<String>
list2 = new ArrayList<String>();
list2.add( "Hii" );
list2.add( "Geeks" );
list2.add( "Gaurav" );
System.out.println( "List2: "
+ list2);
ArrayList<String>
list3 = new ArrayList<String>();
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]
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...