在此方案中使用数据结构

时间:2011-04-07 15:06:23

标签: java data-structures

我的数据格式如下 -

01/04/2011  - {00:00,1.0} ; {01:00,2.0} ; {02:00,1.5} ;{04:00,2.3} 
02/04/2011  - {00:00,2.0} ; {01:00,2.1} ; {02:00,1.5} ;{04:00,2.3}
03/04/2011  - {00:00,3.0} ; {01:00,2.0} ; {02:00,1.6} ;{04:00,2.3}
04/04/2011  - {00:00,1.0} ; {01:00,2.5} ; {02:00,1.57} ;{04:00,2.3}
05/04/2011  - {00:00,1.9} ; {01:00,2.7} ; {02:00,1.5} ;{04:00,2.3}
06/04/2011  - {00:00,1.08} ; {01:00,2.02} ; {02:00,1.9} ;{04:00,2.3}
07/04/2011  - {00:00,1.7} ; {01:00,2.0} ; {02:00,1.10} ;{04:00,2.3}

我必须将它们存储在某些DataStructure中,以便我可以使用日期作为键来访问它们。同时,对于特定的日期,{k,v}对应按插入方式排序。

请提示在这种情况下使用哪种最佳DataStructure以及应该使用它的原因。提前谢谢!

4 个答案:

答案 0 :(得分:5)

听起来和我Map<Date,List<Record>>完全一样。如果您使用HashMap,则查找给定日期将是O(1)操作。使用这种方法没有特别的顺序。

或者您可以使用LinkedHashMap,然后可以保留订购,如果您需要按日期顺序浏览记录,这可能很有用。

答案 1 :(得分:1)

对我来说看起来像MultiMap

MultiMap<Date, SomeRecord> records = ArrayListMultiMap.create();
records.put(..., ...);

答案 2 :(得分:0)

从您的示例数据中可以看出,每个日期的值只是每小时的数字集合。因此,如果每个数字始终只有一个日期和时间,则可以使用Map<Date, Float>。例如。 “01/04/2011 00:00”是“1.0”,“01/04/2011 01:00”是“2.0”。您可以使用TreeMap<Date, Float>按顺序保留它们,并使用subMap()方法仅提取所需的日期范围。

答案 3 :(得分:0)

我认为最好的解决方案是这种结构: http://download.oracle.com/javase/1.4.2/docs/api/java/util/LinkedHashMap.html

条目按插入顺序保存。 还有另一个好处 - 由于密钥被散列,列表中的搜索更快完成。