如何通过某个列对java中的2D数组进行排序

时间:2014-01-22 06:14:37

标签: java arrays sorting

我有一个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]);
}

但是,相反,这会改变我的一天。

搜索之后,我发现堆栈中的一些人正在使用比较器类进行排序。是否可以使用它?

5 个答案:

答案 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 从字符串转换为日期