2011-09-21 52 views
1

在java中,这里有一个catch。对象已经被编译,因此hash()和equals()方法不能被覆盖。把它放到一个集合中,然后回到列表中将不起作用,因为唯一性标准当前没有在equals()中定义,并且这不能被覆盖。删除对象列表中的重复项而不依赖于集合

+0

你在'equals()'方法中没有定义'唯一性'的标准是什么? – Atreys

回答

3

你应该仍然能够创建子类并创建equalshashcode工作的方法,除非类/方法是final

如果是这种情况,您可以使用组合,基本上为您要放入集合的东西创建一个包装,并让包装的equalshashcode正确地实现合同,以包装物件。

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

+0

有时哈希码变得棘手/昂贵... –

+0

当然,但它仍然必须是正确的。 – hvgotcodes

+0

问题是如果比较便宜,TreeSet方法可能会更好。原来的问题并没有说有什么好的哈希码。 –

1

为您的物品写一个自定义Comparator并使用Collections.sort()对您的物品进行分类。然后通过查看循环中的列表来删除重复项。

+1

...或者使用'Comparator'和'TreeSet' –

1

a compareTo方法将返回-10,1;如果0,请从列表中删除。