【发布时间】:2015-06-04 15:18:12
【问题描述】:
这个问题已经被问过很多次了,我的理解是它应该返回 0 以及 1 和 -1 但我仍然得到这个异常
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:895)
at java.util.TimSort.mergeAt(TimSort.java:512)
at java.util.TimSort.mergeForceCollapse(TimSort.java:453)
at java.util.TimSort.sort(TimSort.java:250)
at java.util.Arrays.sort(Arrays.java:1512)
at java.util.ArrayList.sort(ArrayList.java:1454)
at java.util.Collections.sort(Collections.java:175)
代码sn-p
Collections.sort(List, new Comparator < Employee > () {
public int compare(Employee emp1, Employee emp2) {
int compareVal = 0;
int returnVal = 0;
try {
if (emp1 == emp2) {
returnVal = 0;
} else {
if (empName.equalsIgnoreCase(Constant.EMP_ID)) {
if (emp1.getEmpCode() != null && emp2.getEmpCode() != null) {
compareVal = emp1.getEmpCode().compareToIgnoreCase(emp2.getEmpCode());
}
} else {
compareVal = 5;
}
if (compareVal > 0) {
returnVal = 1;
} else if (compareVal < 0) {
returnVal = -1;
} else if (compareVal == 0) {
returnVal = 0;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return returnVal;
}
});
【问题讨论】:
-
当前状态下的代码语法不正确。你有一个悬空的
else。请修复您的代码。 -
您的问题缺少很多细节。 Employee 的什么属性是您比较的基础?在这种情况下,empName 是什么?我们没有看到它在任何地方初始化。什么是员工代码?看起来像一个字符串。代码看起来也很乱。请向我们提供更多详细信息,以便我们为您提供帮助。
标签: java sorting collections