我有一个地图以下列格式存储时间序列数据
HashMap<Date,Double> infiniteTimeSeries;
Run Code Online (Sandbox Code Playgroud)
变量infiniteTimeSeries可以包含从1AD到2100AD的数据.当用户询问1970年1月1日至1972年1月1日之间的值时,我需要选择仅对应于所请求时间范围的数据.
是否有捷径可寻?像一个图书馆.我试图避免在地图上循环,因为地图甚至可以有100年的数据并且在短的请求时间范围内迭代300000个元素会严重影响性能
请提供宝贵的建议
您可以使用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.
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |