Java - 如何对2D数组进行排序?

时间:2013-03-18 12:43:57

标签: java arrays sorting double

我有一个关于排序数组的问题。

我有一个这样的数组:

long[][] allDate = new long[lenght][2];

和价值是: allDate[][0]代表以毫秒为单位的日期 并且allDate[][1]在这种情况下代表了它之前的日期价格 例如

allDate[0][0] = 142142141
allDate[0][1] = 90
日期的

allDate[][0]值始终是将来的 我想要做的是按递增的时间逻辑对这个日期进行排序。 但问题是我想保留它们的价格,所以我可以把它添加到我的Jfreechart折线图中。

在这个循环中

    for (int i = 0; i < a7; i++) {
        int day = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60 * 60 * 24));
        int month = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60 * 60));
        int year = (int) (new Date().getTime() + allDate[i][0] / (1000 * 60));
        s1.add(new Day(day, month, year), (eWallet + allDate[i][1]));
    }

任何想法如何排序?

1 个答案:

答案 0 :(得分:4)

  

和valus是:allDate [] [0]以毫秒为单位代表日期,allDate [] [1]代表值,在这种情况下是从之前的日期价格

所以第一个我要做的就是避免将它们存储为2D数组。而是存储这对值的1D集合(无论是数组还是列表):

PriceSnapshot[] prices = ...;

PriceSnapshot包含一个时间戳(无论是longDate,Joda时间Instant等等等等)和价格。

此时,您可以轻松编写Comparer<PriceSnapshot>以按时间比较,并使用它进行排序。当然你可以写一个Comparer<long[]>,但那不会那么好。

(另请注意,对于您当前的循环,您将“当前时间”视为3次,这意味着您可能会以不同的日期结束。不好主意。拍摄单个快照“现在“然后反复使用它。”