在Java中按时间对大量字符串记录进行排序

时间:2018-08-25 01:52:09

标签: java performance sorting memory timestamp

我有一个包含几百万行记录的CSV,我喜欢按时间对其进行排序。目前,我只是将它放在以ZonedDateTime为键的树形图中。有更好的方法吗?猜猜至少使用toEpochSecond()并使用EpochSecond作为密钥更好吗?是否有进一步的改善?

时间在CSV字段中,下面是一个示例:

ABC.DE,,Market Price,2018-07-19T08:21:32.633494851+01,Quote,,,,,19.01,425,,,21.09,250,,,298911,21:32.6,,,,,,,,,, 

1 个答案:

答案 0 :(得分:1)

要进行排序,请使用sort。有Arrays::sortCollections::sort(流中还有sorted)。

  

顺便说一句,如果万一时间重复,我需要稍微调整一下时间,否则记录将会丢失。不知道是否有其他方法可以使用更少的内存或更快的内存,或者不需要确保时间是分开的。

可以肯定,简单的sort不需要时间来区分。它很可能需要更少的内存,并且速度更快。

对于真正的海量数据,您可以执行某种文件合并排序,因此您无需将其全部保存在内存中。但是,当您有那么多内存时,就没有收获了,是吗?

  

至少猜猜是最好使用toEpochSecond()并使用EpochSecond作为密钥吗?

也许。或者保存您自己的所有解析,然后对字符串进行排序。假设您在各处都使用相同的时区,那么无论您将{DateTime还是stringtime都视为日期时间或字符串,2018-07-19T08:21:32.633494851+01都会进行比较。