我需要数据结构来有效处理日期

时间:2010-05-13 08:47:30

标签: java hashtable date

我需要的是像Hashtable这样的东西,我将填写实际所需日期的价格。

例如:我将提出两个价格:1月1日:100USD,3月5日:89美元。

如果我搜索哈希表的价格:hashtable.get(2月14日)我需要它给我回到1月1日输入的实际价格,因为这是最后的实际价格。正常的哈希表实现不会给我任何东西,因为没有任何东西放在那个数据上。

我需要看看是否有这样的实现可以根据日期范围快速找到对象。

4 个答案:

答案 0 :(得分:5)

在我的头顶,有几种方法,但我会使用TreeMap<Date>(或Calendar等)。

当您需要提取Date date时,请尝试以下操作:

  1. 尝试get(date)
  2. 如果结果为null,则结果位于headMap(date).lastKey()
  3. 其中一个会起作用。当然,首先检查headMap(date)的大小,因为如果lastKey()为空,Exception会抛出{{1}}。

答案 1 :(得分:0)

您可以使用包含两者的DatePrice对象,并按日期将它们保存在列表或数组中,然后使用二进制搜索(在CollectionsArrays类中可用)找到最近的日期。

这比使用TreeMap显着更具内存效果,并且看起来你不想随意插入或删除数据(这会导致数组性能不佳)。

答案 2 :(得分:0)

使用Date,String创建树图。如果有人要求一个日期,那么将字符串转换为日期并调用map.get(date),如果你找到,那么取上一个键而不是当前元素。

答案 3 :(得分:0)

您已拥有所有工具。考虑一个TreeMap。然后,您可以创建一个头像,其中仅包含严格低于给定值的地图部分。实施示例:

TreeMap<Date,Double> values = new TreeMap<Date,Double>();
...fill in stuff...
Date searchDate = ...anydate...
// Needed due to the strictly less contraint:
Date mapContraintDate = new Date(searchDate.getTime()+1); 
Double searchedValue = values.get(values.headMap(mapContraintData).lastKey);

这很有效,因为headMap不是通过复制原始地图来创建的,而是只返回一个视图。