我正在尝试重现本文中提到的问题:比较方法违反了一般合同
我要做的是制作一个父级A,该类具有其自己的compareTo()函数,然后我从A类中继承了B类,并覆盖了compareTo(),例如:
public int compareTo(Object o) { return super.compareTo(o);}
和另一个C类也从A类继承,并覆盖CompareTo()为:
public int compareTo(Object o) { return -super.compareTo(o);}
因此,我列出了一堆B/C对象的列表,然后使用Collections.Sort()对它们进行排序,但是我没有看到上一篇文章中提到的例外,但是Sort函数运行良好,但是它给出了我一个奇怪的命令。
有人可以在这里帮我吗?谢谢。
"比较方法违反了其一般合同"例外是在最佳及时基础上抛出的:如果排序算法会看到任何明显的东西会引发例外,则但是它不会为测试您的比较方法做任何额外的工作。您可能只是对您的测试数据很幸运。
,如果您很幸运,则不得抛出是完全正常的,但是这种例外可能会在任何时候出现。
作为集合的文档。
iLlegalargumentException-(可选)如果实施发现列表要素的自然顺序违反了可比的合同
不需要实现它。
还请注意
实施注意:
此实现使用指定列表和空比较器。
和list.sort的文档包含相同的说明,此例外是可选的。