我有一个2d的整数数组,它们保存一个日期:月份在索引0处,索引1处的日期和索引2处的年份
date [0][0] = 10;
date [0][1] = 14;
date [0][2] = 2013;
System.out.println(date[0][0] + "-" + date[0][1] + "-" + date[0][2]);
输出:
10-14-2013
如果我有很多这样的话,是否可以按时间顺序对这些日期进行排序?
这是我到目前为止所做的:
for(int i =0; i < date.length; i++)
{
Arrays.sort(date[i]);
}
但是,相反,这会改变我的一天。
搜索之后,我发现堆栈中的一些人正在使用比较器类进行排序。是否可以使用它?
答案 0 :(得分:1)
为什么不使用Date个对象?它似乎已经实现了你想要用这个2D数组做的事情。
实际上应该使用Calendar.set取代上面的链接
答案 1 :(得分:1)
虽然使用日期对象更有意义(你在object denial),但使用自定义比较器对这个2D数组进行排序并不困难:
Arrays.sort(data, new Comparator<int[]>() {
public int compare(int[] a, int[] b) {
// compare years
if (a[2] == b[2]) {
// compare months
if (a[0] == b[0]) {
return Integer.compare(a[1], b[1]);
} else {
// compare days
return Integer.compare(a[0], b[0]);
}
} else {
return Integer.compare(a[2], b[2]);
}
}
});
答案 2 :(得分:0)
抽象日期将日,月,年属性转换为自定义Date对象。
public class Date{
int day;
int month;
int year;
}
您的Date类应该实现比较器/类似接口,然后提供compare / comareTo方法实现。
然后您就可以使用内置的Java排序方法对Date对象的数组/列表进行排序。
答案 3 :(得分:0)
制作日期对象。只需将您的字符串解析为月,日和年。 然后实现compareTo接口。
Public class Date implements compareTo{
private int day,month,year;
public Date(int d,int m,int y ){
day=d;
month=m;
year=y;
}
public int compareTo(Date date){
if(year<date.year)
return -1;
else if(year>date.year)
return 1;
else if(year==date.year)
if(month<date.month)
return -1
else if (month>date.month)
return 1;
else if(month==date.month)
if (day>date.day)
return 1;
else if (day<date.day)
return -1;
else return 0; //i.e the two dates are equal since they have the same day,month and year
}
}
完成后,根据CompareTo方法实现排序方法。 编辑 - 一旦你这样做,你需要一个普通的数组而不是2D数组。
答案 4 :(得分:0)
如果你想保留数组结构,请使用类似 计数/基数排序 的东西来保存一天
首先:对于年份,将所有项目的索引存储在一个列表中的年份相同。
对于每年的年度列表,按月以类似的方式对它们进行排序。
今天做类似的事情。
打印所有索引,从年份开始。享受:)
但是使用内置可比方法的日期类型将是最好的。
注意:实际上,关键点是使用索引并使用一些稳定排序从3个不同的角度对它们进行排序:年,一个月和一天
查看您的评论,您可以使用SimpleDateFormat 从字符串转换为日期。