【发布时间】:2015-10-27 19:59:01
【问题描述】:
我的列表中有这个compareTo 代码:
public int compareTo(className a)
{
return (this.long1 > a.long1) ? 1 : -1;
}
当我使用Collections.sort(list) 时,我收到以下错误:Comparison method violates its general contract!
当我将它更改为if (this.long1 >= a.long2) 时,它可以工作,但它不能正确排序。多头按顺序排序,然后是乱序,然后是按顺序。使用>=,输出如下:
...
2000100
2000101
2000102
1000100
1000101
2000101
2000102
...
现在,重复确实发生了,它们需要正确排序。重复出现在第一个还是最后一个并不重要,只要它们按顺序正确分组即可,如下所示:
...
2000100
2000101
2000101
2000102
2000102
1000100
1000101
...
我该如何正确地做到这一点?谢谢。
更新
列表仍在按以下所有建议进行排序。这是因为它是List<Class> list = new ArrayList<Class>(); 吗?我不能使用我习惯的 C#:List<Class> list = new List<Class>()。
【问题讨论】:
-
你不处理相等,在这种情况下,你需要返回
0。 -
Google 你的错误,有很多帖子可以解决你的问题。
-
@MarounMaroun,不是真的。这些建议都不起作用。