Java: Detect duplicates in ArrayList? Java: Detect duplicates in ArrayList? arrays arrays

Java: Detect duplicates in ArrayList?


Simplest: dump the whole collection into a Set (using the Set(Collection) constructor or Set.addAll), then see if the Set has the same size as the ArrayList.

List<Integer> list = ...;Set<Integer> set = new HashSet<Integer>(list);if(set.size() < list.size()){    /* There are duplicates */}

Update: If I'm understanding your question correctly, you have a 2d array of Block, as in

Block table[][];

and you want to detect if any row of them has duplicates?

In that case, I could do the following, assuming that Block implements "equals" and "hashCode" correctly:

for (Block[] row : table) {   Set set = new HashSet<Block>();    for (Block cell : row) {      set.add(cell);   }   if (set.size() < 6) { //has duplicate   }}

I'm not 100% sure of that for syntax, so it might be safer to write it as

for (int i = 0; i < 6; i++) {   Set set = new HashSet<Block>();    for (int j = 0; j < 6; j++)    set.add(table[i][j]); ...

Set.add returns a boolean false if the item being added is already in the set, so you could even short circuit and bale out on any add that returns false if all you want to know is whether there are any duplicates.


Improved code, using return value of Set#add instead of comparing the size of list and set.

public static <T> boolean hasDuplicate(Iterable<T> all) {    Set<T> set = new HashSet<T>();    // Set#add returns false if the set does not change, which    // indicates that a duplicate element has been added.    for (T each: all) if (!set.add(each)) return true;    return false;}


If you are looking to avoid having duplicates at all, then you should just cut out the middle process of detecting duplicates and use a Set.