无法获得唯一的List元素

时间:2013-05-29 21:53:34

标签: java arraylist

我正在尝试使用以下格式从类列表中提取唯一元素:

[EntityClientPlayerMP['Player989'/228, l='MpServer', x=138.16, y=68.62, z=522.96], EntityCow['Cow'/231, l='MpServer', x=143.63, y=68.00, z=527.50]....]

这些列表的大小通常为60-100。

我现在尝试使用的方法是

List<Class> uniqueList = new ArrayList<Class>(new HashSet<Class>(fullList));

这会返回完全相同的列表,但排序方式有所不同。关于为什么的任何想法?

3 个答案:

答案 0 :(得分:3)

它们的排序方式不同,因为HashSet具有“怪异”排序,基于Objects的hashCode。要保留排序,请使用LinkedHashSet

至于唯一性,该集将使用equals()hashCode(),因此请确保这些正确实施。有时可行的懒惰技术是使用对象的toString()方法(并在字符串上调用hashCode和equals)。

答案 1 :(得分:2)

您需要为equals()hashcode()

提供正确的实施方案

答案 2 :(得分:2)

请勿忘记覆盖每个实体类(equals())中的hashCode()why?方法,否则该套装无法正常使用确定两个元素何时相等。另外,我认为你的意思是:

List<EntityClientPlayerMP> uniqueList =
    new ArrayList<EntityClientPlayerMP>(
        new LinkedHashSet<EntityClientPlayerMP>(fullList));

现在在上面的代码段中,type参数特别是一个(不是Class,如问题所示,请根据需要替换为实际类型),并使用LinkedHashSet我们保证订购在原始列表中保留。