从无限时间序列中获取一系列数据

Ran*_*rer 2 java time-series

我有一个地图以下列格式存储时间序列数据

HashMap<Date,Double> infiniteTimeSeries;
Run Code Online (Sandbox Code Playgroud)

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

是否有捷径可寻?像一个图书馆.我试图避免在地图上循环,因为地图甚至可以有100年的数据并且在短的请求时间范围内迭代300000个元素会严重影响性能

请提供宝贵的建议

And*_*mas 6

您可以使用TreeMap而不是HashMap.

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

在TreeMap中,您可以使用TreeMap.subMap()在一系列键上获取地图的子集.此版本从fromKey包含扩展到toKey独占.(兄弟姐妹允许其他选择.)

public SortedMap<K,V> subMap(K fromKey,
                         K toKey)
Run Code Online (Sandbox Code Playgroud)

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