我正在尝试使用以下格式从类列表中提取唯一元素:
[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));
这会返回完全相同的列表,但排序方式有所不同。关于为什么的任何想法?
答案 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
我们保证订购在原始列表中保留。