Zombies
Zombies

Reputation: 25882

Remove duplicates from a list of objects without relying on a set

In java, and there is one catch here. The objects are already compiled and the hash() and equals() methods therefore cannot be over written. Throwing it into a set, then back into a list will not work because the criteria for uniqueness isn't currently defined in equals() and this cannot be overridden.

Upvotes: 1

Views: 212

Answers (3)

hvgotcodes
hvgotcodes

Reputation: 120198

You should still be able to create subclasses and create equals and hashcode methods that work, unless the classes/methods are final.

If that is the case, you could use composition, basically create a wrapper for the things you are putting in the collection, and have the wrapper's equals and hashcode implement the contract correctly, for the thing being wrapped.

You are in a tough position, because what I am reading is that the original classes are not following the contract for equals and hashcode which is a real problem in Java. It's a pretty serious bug.

Upvotes: 3

Beez
Beez

Reputation: 2101

a compareTo method would return -1, 0, 1; if 0, remove from list.

Upvotes: 1

Andrey Adamovich
Andrey Adamovich

Reputation: 20663

Write a custom Comparator for your objects and use Collections.sort() to sort your list. And then remove duplicates by going though a list in a loop.

Upvotes: 1

Related Questions