2016-02-12 84 views
2

我有一个地图存储的时间序列数据在以下格式获取的范围数据从无穷时间序列

HashMap<Date,Double> infiniteTimeSeries; 

可变infiniteTimeSeries可以具有从1AD甚至2100AD数据。 当用户询问1970年1月1日至1972年1月1日之间的值时,我需要选择仅对应于所请求的时间范围的数据。

有没有简单的方法来做到这一点?像图书馆一样。 我试图避免循环在地图上,在地图甚至可以在100年的数据和迭代像300000元件短时要求的时间范围内将影响性能严重

请请提供您的宝贵建议

回答

5

您可以使用TreeMap而不是HashMap。

默认情况下,TreeMap按键的自然顺序排序。 java.util.Date类通过实现Comparable<Date>来定义自然排序。

从TreeMap中,您可以使用TreeMap.subMap()在一系列键上获得地图的子集。此版本从fromKey延伸至toKey。 (兄弟姐妹允许其他选项。)

public SortedMap<K,V> subMap(K fromKey, 
         K toKey) 

顺便说一句,如果你在Java中8个工作,你可能会考虑使用新的Instant类,而不是旧的Date类的。 Instant也实现了Comparable。

+0

它的工作...非常感谢 – naga1990