The set interface is present in java.util package and extends the Collection interface is an unordered collection of objects in which duplicate values cannot be stored. It is an interface that implements the mathematical set. This interface contains the methods inherited from the Collection interface and adds a feature that restricts the insertion of the duplicate elements. There are two interfaces that extend the set implementation namely SortedSet and NavigableSet.
Methods: Following are the various ways to merge two sets in Java:Â
- Using double brace initialization
- Using the addAll() method of the Set class
- Using user-defined method
- Using Java 8 stream in the user-defined function
- Using Java 8 stream in the user-defined function
- Using of() and forEach() Methods of Stream class
- Using of() and flatMap() Method of Stream class with Collector
- Using concat() method of Stream Class with Collector
- Using Apache Common Collections
- Using Guava Iterables.concat()
Â
Method 1: Using Double brace Initialization
Illustration:
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Example
Java
// Java Program to Demonstrate Merging of two sets in Java // Using Double brace Initialization   // Importing required classes import java.io.*; import java.util.*; import java.util.stream.*;   // Main class public class GFG {       // Method 1     // To merge two sets     // using DoubleBrace Initialisation     public static <T> Set<T> mergeSet(Set<T> a, Set<T> b)     {           // Adding all elements of respective Sets         // using addAll() method         return new HashSet<T>() {             {                 addAll(a);                 addAll(b);             }         };     }       // Method 2     // Main driver method     public static void main(String[] args)     {           // Creating the sets to be merged           // First set         Set<Integer> a = new HashSet<Integer>();         // Applying Arrays.asList()         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second set         Set<Integer> b = new HashSet<Integer>();         // Applying Arrays.asList()         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing the Sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling Method 1 to merge above Sets         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
Method 2: Using addAll() Method of Set Class
The addAll() method is provided by the Set interface. It adds the elements passed as parameters at the last of this set.Â
2-A. Using user-defined method
Illustration:
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Example:
Java
// Java program to demonstrate Merging of Two Sets // Using SetAll() method   // Importing required classes import java.util.*;   // Main class public class GFG {       // Method 1     // To merge two sets     // using addAll()     public static <T> Set<T> mergeSet(Set<T> a, Set<T> b)     {           // Creating an empty HashSet         Set<T> mergedSet = new HashSet<T>();           // Adding the two sets to be merged         // into the new Set using addAll() method         mergedSet.addAll(a);         mergedSet.addAll(b);           // Returning the merged set         return mergedSet;     }       // Method 2     // Main driver method     public static void main(String[] args)     {           // Creating the sets to be merged           // First Set         Set<Integer> a = new HashSet<Integer>();         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second Set         Set<Integer> b = new HashSet<Integer>();         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing the Sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling method 1 to merge above Sets         // and printing it         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
2-B. Using Java 8 stream in the user-defined function
Illustration:Â
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Example
Java
// Java program to demonstrate Merging of Two Sets // Using Stream   // Importing required classes import java.io.*; import java.util.*; import java.util.stream.*;   // Main class public class GFG {       // Method 1     // To merge two Sets     // using addAll()     public static <T> Set<T> mergeSet(Set<T> a, Set<T> b)     {           // Creating a Set with 'a'         Set<T> mergedSet             = a.stream().collect(Collectors.toSet());           // Adding the second set to be merged         mergedSet.addAll(b);           // Returning the merged Set         return mergedSet;     }       // Method 2     // Main driver method     public static void main(String[] args)     {         // Creating the Sets to be merged           // First set         Set<Integer> a = new HashSet<Integer>();         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second set         Set<Integer> b = new HashSet<Integer>();         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing above Sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling method 1 to merge two Sets         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
Method 3:Â Using addAll() method of Collections ClassÂ
Illustration:
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Example:
Java
// Java Program to Merge Two Arrays // of Same Type into an Object Array   // Importing required classes import java.io.*; import java.util.*;   // Main class class GFG {       // Method 1     // To merging two Sets     // using addAll()     public static Set<Integer> mergeSet(Set<Integer> a,                                         Set<Integer> b)     {           // Creating an empty HashSet of Integer type         Set<Integer> mergedSet = new HashSet<>();           // Adding the two sets to be merged         // into the new Set         Collections.addAll(mergedSet,                            a.toArray( new Integer[ 0 ]));         Collections.addAll(mergedSet,                            b.toArray( new Integer[ 0 ]));           // Returning the merged Set         return mergedSet;     }       // Method 2     // Main driver method     public static void main(String[] args)     {           // Creating the sets to be merged           // First set         Set<Integer> a = new HashSet<Integer>();         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second set         Set<Integer> b = new HashSet<Integer>();         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing the above two Sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling above method 1 to merge two sets         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
Method 4: Using of() and forEach() Methods of Stream classÂ
Illustration:Â
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Example:
Java
// Java Program to Demonstrate Merging of Two Sets // Using Stream   // Importing required classes import java.io.*; import java.util.*; import java.util.stream.*;   // Main class public class GFG {       // Method 1     // To merge two sets     // using Stream of() and forEach() methods     public static <T> Set<T> mergeSet(Set<T> a, Set<T> b)     {           // Creating an empty set         Set<T> mergedSet = new HashSet<T>();           // add the two sets to be merged         // into the new set         Stream.of(a, b).forEach(mergedSet::addAll);           // returning the merged set         return mergedSet;     }       // Method 2     // Main driver method     public static void main(String[] args)     {           // Creating the sets to be merged           // First set         Set<Integer> a = new HashSet<Integer>();         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second set         Set<Integer> b = new HashSet<Integer>();         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing the above two Sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling method 1 to merge two Sets         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
Method 5: Using of() and flatMap() Method of Stream class with Collector
Illustration:
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Example:
Java
// Java Program to Demonstrate Merging of Two Sets // Using stream   // Importing required classes import java.io.*; import java.util.*; import java.util.stream.*;   // Main class public class GFG {       // Method 1     // To merge two Sets     // using Stream of(), flatMap() and Collector     public static <T> Set<T> mergeSet(Set<T> a, Set<T> b)     {           // Adding the two Sets to be merged         // into the new Set and         // returning the merged set         return Stream.of(a, b)             .flatMap(x -> x.stream())             .collect(Collectors.toSet());     }       // Method 2     // Main driver method     public static void main(String[] args)     {         // Creating the sets to be merged           // First Set         Set<Integer> a = new HashSet<Integer>();         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second Set         Set<Integer> b = new HashSet<Integer>();         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing the sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling method 1 to merge above two Sets         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
Method 6: Using concat() method of Stream Class with Collector
Illustration:Â
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
The concatenate function is used to merge to string and make a single string that contains both the string. Stream.concat() method creates a lazily concatenated stream whose elements are all the elements of the first stream followed by all the elements of the second stream.
ExampleÂ
Java
// Java program to Demonstrate Merging of two Sets // using Stream   // Importing required classes import java.io.*; import java.util.*; import java.util.stream.*;   // Main class public class GFG {       // Method 1     // To merge two sets     // using Stream concat() and Collectors     public static <T> Set<T> mergeSet(Set<T> a, Set<T> b)     {           // Adding the two sets to be merged         // into the new Set and         // returning the merged set         return Stream.concat(a.stream(), b.stream())             .collect(Collectors.toSet());     }       // Method 2     // Main driver method     public static void main(String[] args)     {         // Creating the sets to be merged           // First Set         Set<Integer> a = new HashSet<Integer>();         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second Set         Set<Integer> b = new HashSet<Integer>();         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing the above two Sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling the method 1 to merge two Sets         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
Method 7: Using Apache Common Collections
Illustration:
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Example
Java
// Java Program to Demonstrate Merging of Two Sets // Using Apache Common Collection   // Importing required classes import java.io.*; import java.util.*; import org.apache.commons.collections4.SetUtils;   // Main class public class GFG {       // Method 1     // To merge two Sets     // using addAll() method     public static <T> Set<T> mergeSet(Set<T> a, Set<T> b)     {           // Adding the two Sets to be merged         // into the new Set and         // returning the merged Set         return SetUtils.union(a, b);     }       // Method 2     // Main driver method     public static void main(String[] args)     {           // Creating the Sets to be merged           // First set         Set<Integer> a = new HashSet<Integer>();         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second set         Set<Integer> b = new HashSet<Integer>();         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing the above two Sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling method 1 to merge two Sets         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
Method 8: Using Guava Iterables.concat()
Illustration:
Input : a = [1, 3, 5, 7, 9] b = [0, 2, 4, 6, 8] Output : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Example
Java
// Java Program to Demonstrate Merging of Two Sets // Using Guava Library   // Importing required classes import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import java.io.*; import java.util.*;   // Main class public class GFG {       // Method 1     // To merge two sets     // using Guava Iterables.concat()     public static <T> Set<T> mergeSet(Set<T> a, Set<T> b)     {           // Adding the two sets to be merged         // into the new set and         // returning the merged set         return Sets.newHashSet(Iterables.concat(a, b));     }       // Method 2     // Main driver method     public static void main(String[] args)     {           // Creating the Sets to be merged           // First set         Set<Integer> a = new HashSet<Integer>();         a.addAll(             Arrays.asList( new Integer[] { 1 , 3 , 5 , 7 , 9 }));           // Second set         Set<Integer> b = new HashSet<Integer>();         b.addAll(             Arrays.asList( new Integer[] { 0 , 2 , 4 , 6 , 8 }));           // Printing the above two Sets         System.out.println( "Set a: " + a);         System.out.println( "Set b: " + b);           // Calling method 1 to merge two Sets         System.out.println( "Merged Set: " + mergeSet(a, b));     } } |
Set a: [1, 3, 5, 7, 9] Set b: [0, 2, 4, 6, 8] Merged Set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Â
Note: Any duplicate element presented in the sets will be discarded during the merge in all the above methods.