用于在日期之间检索数据的更好的数据结构

时间:2014-03-19 13:36:49

标签: java performance data-structures complexity-theory

我有一个类,它以日期为关键,价格为值。我的数据结构存储了大约500万个条目。当我想要检索某个日期范围内的数据时,我将遍历数据结构并检查当前数据是否在日期范围内。

e.g。

if (startDate >= data.date && data.date <= endDate)
   //do something

然而,这是非常低效的。有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果内存/性能不是约束*,您只需使用TreeMap,其中subMap method允许您在时间窗口上进行过滤:

TreeMap<Date, Double> data = ...;
for (Double price : data.subMap(startDate, true, endDate, true).values()) {
    //do something with price
}

*即。如果您不需要将价格保持为原始双打,例如

答案 1 :(得分:1)

  • 确保按键排序数据(即按日期排序)。
  • 使用二进制搜索查找开始日期
  • 只要您还没有达到结束日期,就会列举

编辑:是的,使用TreeMap可以很好地自动完成工作。不知道是否允许您更改数据结构。