开发者

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

开发者 https://www.devze.com 2023-04-06 23:32 出处:网络
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

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消