【问题标题】:Better data structure for retrieving data in between dates更好的数据结构,用于在日期之间检索数据
【发布时间】:2014-03-19 13:36:49
【问题描述】:
我有一个类,它将日期存储为键,将价格存储为值。我的数据结构存储了大约 500 万个条目。当我想检索某个日期范围内的数据时,我会遍历数据结构并检查当前数据是否在日期范围内。
例如
if (startDate >= data.date && data.date <= endDate)
//do something
但是,这是非常低效的。有没有更好的方法来做到这一点?
【问题讨论】:
标签:
java
performance
data-structures
complexity-theory
【解决方案1】:
如果内存/性能不是限制*,您可以简单地使用TreeMap,它有一个subMap method,允许您在时间窗口上进行过滤:
TreeMap<Date, Double> data = ...;
for (Double price : data.subMap(startDate, true, endDate, true).values()) {
//do something with price
}
*即例如,如果您不需要将价格保持为原始双倍价格
【解决方案2】:
- 确保数据按键排序(即按日期)。
- 使用二分法查找开始日期
- 枚举,只要您还没有到达结束日期
- 瞧
编辑:是的,使用TreeMap 可以很好地自动化工作。不知道你是否可以改变你的数据结构。