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.
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.
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.
a compareTo
method would return -1
, 0
, 1
; if 0
, remove from list.
精彩评论