Search code examples
javasetunique

How to find unique elements in multiple ArrayList in Java


I have multiple Integer ArrayList, which contains some duplicate elements. I want to get the unique elements from them. But how?
java.util.ArrayList.removeAll() is not serving my purpose completely. See the below test code-

ArrayList<Integer> d = new ArrayList<Integer>();
d.add(2);
d.add(4);
d.add(5);
d.add(7);
d.add(8);
d.add(9);

ArrayList<Integer> e = new ArrayList<Integer>();
e.add(3);
e.add(7);

d.removeAll(e);

for (int t : d) {
    System.out.print(t+", ");
}

In output, i am getting 2, 4, 5, 8, 9, . Clearly 3 is missing. Also just to keep it simple, I am using only two ArrayList here but in my code, i have more than two ArrayList.

How I can find unique elements in multiple ArrayList in Java


Solution

  • Create a Set<Integer> from your List<Integer>. The set will contain no duplicate objects:

    List<Integer> lstNumbers = new ArrayList<Integer>();
    //fill the list of integers...
    Set<Integer> setNumbers = new HashSet<Integer>(lstNumbers);
    //the set will contain no duplicate values...
    for (int t : setNumbers) {
        System.out.print(t+", ");
    }
    

    Note that you can add more List<Integer> in the Set by using the Set#addAll method (as shown in rahulroc answer) to add more integers in your not duplicated elements collection:

    //assuming setNumbers has been initialized before
    setNumbers.addAll(anotherListOfNumbers);
    setNumbers.addAll(andAnotherListOfNumbers);
    

    Also, as best practice, try to program to interfaces (List, Set, etc), not to class implementations (ArrayList, HashSet), as shown here: What does it mean to “program to an interface”?