用于解析大数据文件的合适Java数据结构

时间:2011-11-30 10:35:04

标签: java data-structures treemap

我有一个相当大的文本文件(~4m行)我想解析,我正在寻找有关存储数据的合适数据结构的建议。该文件包含如下行:

Date        Time    Value
2011-11-30  09:00   10
2011-11-30  09:15   5
2011-12-01  12:42   14
2011-12-01  19:58   19
2011-12-01  02:03   12

我想按日期对这些行进行分组,因此我最初的想法是使用TreeMap<String, List<String>>将日期映射到该行的其余部分,但TreeMap List是荒谬的要做的事?我想我可以用一个日期对象替换String键(以消除这么多的字符串比较)但是List作为我担心的值可能不合适。

我正在使用TreeMap,因为我想按日期顺序迭代密钥。

3 个答案:

答案 0 :(得分:2)

使用List作为Map的值没有任何问题。所有这些<>看起来都很难看,但是将泛型类放在泛型类中是完全没问题的。

使用String可能更好,而不是使用java.util.Date作为键,因为键是日期。这将允许TreeMap更准确地对日期进行排序。如果您将日期存储为Strings,则TreeMap可能无法正确排序日期(它们将按字符串排序,而不是&#34;真实&#34;日期)。

Map<Date, List<String>> map = new TreeMap<Date, List<String>>();

答案 1 :(得分:1)

  

是一个TreeMap of Lists一个荒谬的事情吗?

从概念上讲不是,但它会非常低效(因为Map而且因为List)。您正在考虑200%或更高的开销。可能会或可能不会接受,具体取决于您需要浪费多少内存。

要获得更节省内存的解决方案,请创建一个包含每列(包括Date)字段的类,将所有这些字段放在List中并对其进行排序(理想情况下使用快速排序) '读完了。

答案 2 :(得分:1)

没有人反对使用列表。虽然在你的情况下可能会有一个List<Integer>作为Map的值是合适的。