我有一个相当大的文本文件(~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
,因为我想按日期顺序迭代密钥。
答案 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的值是合适的。