我对排序数组有疑问。
我有一个像这样的数组:
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
由时间戳(无论是long
,Date
,Joda Time Instant
等)还是价格组成。到那时,您可以轻松编写
Comparer<PriceSnapshot>
以便按时间进行比较,并使用它进行排序。当然,您可以写一个Comparer<long[]>
来代替,但是那几乎没有那么好。(还要注意,在当前循环中,您要花费“当前时间” 3次,这意味着您可能会以不同的日期结束。这是个糟糕的主意。请为“ now”拍摄一张快照,然后重复使用它。)