我需要的是像Hashtable这样的东西,我将填写实际所需日期的价格。
例如:我将提出两个价格:1月1日:100USD,3月5日:89美元。
如果我搜索哈希表的价格:hashtable.get(2月14日)我需要它给我回到1月1日输入的实际价格,因为这是最后的实际价格。正常的哈希表实现不会给我任何东西,因为没有任何东西放在那个数据上。
我需要看看是否有这样的实现可以根据日期范围快速找到对象。
答案 0 :(得分:5)
在我的头顶,有几种方法,但我会使用TreeMap<Date>
(或Calendar
等)。
当您需要提取Date date
时,请尝试以下操作:
get(date)
null
,则结果位于headMap(date).lastKey()
其中一个会起作用。当然,首先检查headMap(date)
的大小,因为如果lastKey()
为空,Exception
会抛出{{1}}。
答案 1 :(得分:0)
您可以使用包含两者的DatePrice
对象,并按日期将它们保存在列表或数组中,然后使用二进制搜索(在Collections
和Arrays
类中可用)找到最近的日期。
这比使用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不是通过复制原始地图来创建的,而是只返回一个视图。