我对排序数组有疑问。

我有一个像这样的数组:

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]));
    }


任何想法如何排序?

最佳答案

其值是:allDate [] [0]以毫秒为单位表示日期,而allDate [] [1]以这种方式表示值,此日期之前的价格


因此,我要做的第一件事就是避免将它们存储为2D数组。而是存储一对值的一维集合(无论是数组还是列表):

PriceSnapshot[] prices = ...;


其中PriceSnapshot由时间戳(无论是longDate,Joda Time Instant等)还是价格组成。

到那时,您可以轻松编写Comparer<PriceSnapshot>以便按时间进行比较,并使用它进行排序。当然,您可以写一个Comparer<long[]>来代替,但是那几乎没有那么好。

(还要注意,在当前循环中,您要花费“当前时间” 3次,这意味着您可能会以不同的日期结束。这是个糟糕的主意。请为“ now”拍摄一张快照,然后重复使用它。)

09-05 18:59