从对象列表中删除重复项而不依赖于集合

时间:2011-09-21 14:58:11

标签: java list set

在java中,这里有一个问题。对象已经编译,因此无法覆盖hash()和equals()方法。将其放入集合中,然后返回到列表将不起作用,因为唯一性的标准当前未在equals()中定义,并且无法覆盖。

3 个答案:

答案 0 :(得分:3)

您应该仍然可以创建子类并创建有效的equalshashcode方法,除非类/方法是final

如果是这种情况,你可以使用合成,基本上为你放入集合中的东西创建一个包装器,让包装器的equalshashcode正确地实现合同,被包裹的东西。

你处境艰难,因为我正在阅读的是原始类没有遵循equalshashcode的合同,这是Java中的一个真正问题。这是一个非常严重的错误。

答案 1 :(得分:1)

为您的对象编写自定义Comparator,并使用Collections.sort()对列表进行排序。然后通过遍历循环中的列表来删除重复项。

答案 2 :(得分:1)

compareTo方法会返回-101;如果0,请从列表中删除。