我有一个地图,以以下格式存储时间序列数据
HashMap<Date,Double> infiniteTimeSeries;
变量无限时间序列可以拥有从 1AD 到甚至 2100AD 的数据。当用户询问 1970 年 1 月 1 日到 1972 年 1 月 1 日之间的值时,我需要选择仅对应于请求的时间范围的数据。
有没有简单的方法可以做到这一点?就像图书馆一样。我试图避免在地图上循环,因为地图甚至可以有 100 年的数据,并且在短时间内迭代 300000 个元素会严重影响性能
请提供您的宝贵建议
您可以使用TreeMap
而不是HashMap。
默认情况下,树状图按其键的自然顺序排序。java.util.Date
类通过实现Comparable<Date>
来定义自然排序。
从树状图中,您可以使用 TreeMap.subMap() 获取一系列键的映射子集。此版本从fromKey
包含扩展到toKey
独占。(同级允许其他选项。
public SortedMap<K,V> subMap(K fromKey,
K toKey)
顺便说一下,如果你使用的是Java 8,你可以考虑使用新的Instant
类而不是旧的Date类。 Instant 还实现了 Comparable。