If you need to find difference between two sets you can use method removeAll. The difference will be kept only on the set which is calling the method.
Definition:
booleanremoveAll(Collection<?> c)
Description:
Removes from this set all of its elements that are contained in the specified collection (optional operation). If the specified collection is also a set, this operation effectively modifies this set so that its value is the asymmetric set difference of the two sets.
Parameters: c
– collection containing elements to be removed from this set
Returns: true
if this set changed as a result of the call
Important: In order removeAll to work the objects which will be inside of the sets must overwrite equals() and hashCode() method and give proper implementation related to the class! In my example I am using String which already has equals() and hashCode() implemented to be effective.
In this example we are creating two sets (set a and set b) with strings and we remove all common strings from set a which are also in set b
import java.util.HashSet; import java.util.Set; public class MainDifference { public static void main(String[] args) { Set<String> a = Set.of("A", "B", "C", "D", "E"); Set<String> b = Set.of("M", "B", "N", "D", "O"); // The difference will be "A", "C", "E" -> elements in "a" which are not in "b" // use copy constructor to get all values from Set "a" Set<String> result = new HashSet<>(a); // remove all elements from set "a" which are contained in set "b" result.removeAll(b); System.out.println(result); } }
Output:
[A, C, E]