Java CompareTo和collections.sort()错误
我在collections.sort方面遇到了问题,因为它没有对任何内容进行排序。我有两个类,一个类有一个比较日期的compareTo方法,另一个类有一个Collections.sort对日期进行排序。我的代码编译并运行时没有错误,但是ArrayList没有排序,有人能告诉我我做错了什么,以及Collections.sort不工作的原因吗 代码如下:Java CompareTo和collections.sort()错误,java,sorting,Java,Sorting,我在collections.sort方面遇到了问题,因为它没有对任何内容进行排序。我有两个类,一个类有一个比较日期的compareTo方法,另一个类有一个Collections.sort对日期进行排序。我的代码编译并运行时没有错误,但是ArrayList没有排序,有人能告诉我我做错了什么,以及Collections.sort不工作的原因吗 代码如下: public class CalendarDate implements Comparable<CalendarDate>{
public class CalendarDate implements Comparable<CalendarDate>{
private int month;
private int day;
//Constructor
public CalendarDate(int month, int day){
this.month = month;
this.day = day;
}
//CompareTo method
public int CompareTo(CalendarDate other){
if(month != other.month){
return month - other.month;
}
else {
return day - other.day;
}
}
//Getters
public int getMonth(){
return month;
}
public int getDay(){
return day;
}
//toString method
public String toString(){
return month + "/" + day;
}
public int compareTo(CalendarDate other) {
return 0;
}
}
公共类CalendarDate实现可比较的{
私人整数月;
私人国际日;
//建造师
公共日历日期(整数月,整数日){
本月=月;
this.day=天;
}
//比较法
公共整数比较(日历日期其他){
如果(月)=其他月份){
返回月份-其他月份;
}
否则{
返回日-其他日期;
}
}
//吸气剂
公共整数getMonth(){
返回月份;
}
public int getDay(){
回归日;
}
//toString方法
公共字符串toString(){
返回月份+“/”+天;
}
公共整数比较(日历日期其他){
返回0;
}
}
import java.util.*;
公共类日历日期排序{
公共静态void main(字符串[]args){
ArrayList=新建ArrayList();
添加(新日历日期(1,11));
添加(新日历日期(5,15));
添加(新日历日期(3,8));
添加(新日历日期(7,10));
添加(新日历日期(3,16));
System.out.println(“排序前的日期=”+列表);
集合。排序(列表);
System.out.println(“排序后的日期=”+列表);
}
}
您将返回一个固定值0
,这将导致列表项永远无法排序。CompareTo
方法中的逻辑需要包含在CompareTo
方法中
@Override
public int compareTo(CalendarDate other) {
if (month != other.month) {
return month - other.month;
} else {
return day - other.day;
}
}
您将返回一个固定值
0
,这将导致列表项永远无法排序。CompareTo
方法中的逻辑需要包含在CompareTo
方法中
@Override
public int compareTo(CalendarDate other) {
if (month != other.month) {
return month - other.month;
} else {
return day - other.day;
}
}
进行比较的
CompareTo
方法有输入错误,并且名称不同。Java标识符区分大小写。实际调用的compareTo
始终返回0(表示所有元素相等)
公共类CalendarDate实现可比较{
//不会被分类调用
公共整数比较(日历日期其他){
如果(月)=其他月份){
返回月份-其他月份;
}
否则{
返回日-其他日期;
}
}
//按排序调用
公共整数比较(日历日期其他){
返回0;
}
}
使用@Override
注释。如果您犯这种错误,它将生成编译错误
另见
重写方法时,您可能希望使用@Override注释来指示编译器您打算重写超类中的方法。如果出于某种原因,编译器检测到某个超类中不存在该方法,那么它将生成一个错误
进行比较的
CompareTo
方法有输入错误,并且名称不同。Java标识符区分大小写。实际调用的compareTo
始终返回0(表示所有元素相等)
公共类CalendarDate实现可比较{
//不会被分类调用
公共整数比较(日历日期其他){
如果(月)=其他月份){
返回月份-其他月份;
}
否则{
返回日-其他日期;
}
}
//按排序调用
公共整数比较(日历日期其他){
返回0;
}
}
使用@Override
注释。如果您犯这种错误,它将生成编译错误
另见
重写方法时,您可能希望使用@Override注释来指示编译器您打算重写超类中的方法。如果出于某种原因,编译器检测到某个超类中不存在该方法,那么它将生成一个错误
因为您的
compareTo(CalendarDate)
方法始终返回0
用伪
CompareTo()
方法中的代码替换返回0
。将@Override
注释添加到compareTo()
(以及您希望与某些接口匹配的其他方法);如果键入方法名称或弄乱签名,这将导致编译器错误。因为compareTo(CalendarDate)
方法始终返回0
用伪
CompareTo()
方法中的代码替换返回0
。将@Override
注释添加到compareTo()
(以及您希望与某些接口匹配的其他方法);如果键入方法名或弄乱签名,这将导致编译器错误。现在可以了谢谢,但我现在有个问题。我不明白为什么一定要这样overriding@Ruben当您实现compareTo
时,它被称为覆盖(无论您是否对其进行注释)。它现在可以工作了谢谢,但我现在有一个问题。我不明白为什么一定要这样overriding@Ruben当您实现compareTo
时,它被称为覆盖(无论您是否对其进行注释)。
public class CalendarDate implements Comparable<CalendarDate>{
// doesn't get called by sort
public int CompareTo(CalendarDate other){
if(month != other.month){
return month - other.month;
}
else {
return day - other.day;
}
}
// gets called by sort
public int compareTo(CalendarDate other) {
return 0;
}
}