【发布时间】:2017-11-28 20:09:31
【问题描述】:
我正在尝试使用可比较的接口编写自定义排序函数。
我的 compareTo 函数如下:
@Override
public int compareTo(MyClass o) {
return (int)(this.getTimeInMills() - o.getTimeInMills());
}
当我尝试对 myClass 对象列表进行排序时遇到以下异常。
28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT java.lang.IllegalArgumentException: Comparison method violates its general contract!
2017-11-28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:866) ~[?:1.8.0_152]
2017-11-28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:483) ~[?:1.8.0_152]
2017-11-28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT at java.util.ComparableTimSort.mergeForceCollapse(ComparableTimSort.java:422) ~[?:1.8.0_152]
2017-11-28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT at java.util.ComparableTimSort.sort(ComparableTimSort.java:222) ~[?:1.8.0_152]
2017-11-28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT at java.util.Arrays.sort(Arrays.java:1312) ~[?:1.8.0_152]
2017-11-28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT at java.util.Arrays.sort(Arrays.java:1506) ~[?:1.8.0_152]
2017-11-28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT at java.util.ArrayList.sort(ArrayList.java:1462) ~[?:1.8.0_152]
2017-11-28T15:02:05.60+0530 [APP/PROC/WEB/0] OUT at java.util.Collections.sort(Collections.java:141) ~[?:1.8.0_152]
MyClass 的实现
public class MyClass implements Comparable<MyClass>{
private String title;
private String description;
private Long timeInMills;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Long getTimeInMills() {
return timeInMills;
}
public void setTimeInMills(Long timeInMills) {
this.timeInMills = timeInMills;
}
@Override
public int compareTo(MyClass o) {
return (int)(this.getTimeInMills() - o.getTimeInMills());
}
}
我在之前的帖子中看到了很多答案,但没有一个有帮助。谁能告诉我 compareTo 函数的问题。
【问题讨论】:
-
你能告诉我们你的全班实施 Comparable 吗?确保实现 Comparable
-
请添加'getTimeInMills()'方法的定义
-
已在问题中添加了 MyClass 实现
标签: java