在(哈希)映射中搜索上一个最接近的日期/字符串

时间:2012-03-04 15:26:25

标签: java data-structures map

我遇到了一个问题,我需要重新设计我的数据结构。

现在我按时间顺序提供了大量信息,并将其保存在Hashmap中,其中密钥为date,同时也是new Info()的成员。

hashMap.put(date.toString(), new Info(date, ...))

日期间隔为5分钟

  

2012-02-15 22:45:00.0
  2012-02-15 22:50:00.0
  2012-02-15 22:55:00.0
  2012-02-15 23:00:00.0
  ...
  2012-02-25 12:10:00.0
  2012-02-25 12:15:00.0

到目前为止,通过获取密钥并且速度是恒定时间来获取信息很容易 hashMap.get(date.toString())

到目前为止,我正在从hashmap获取日期。但现在信息时间顺序可能存在差距。在下面的示例中,缺少2012-02-15 22:50:00.0,因此在搜索该日期时,我会获得NPE 在这种情况下,我必须找到上一个最接近的时间。

  

2012-02-15 22:45:00.0
  2012-02-15 22:55:00.0
  2012-02-15 23:00:00.0   ...

if (hashMap.get(date.toString()) != null) {
   // found it
} else {
   return previousTime(date.toString())
}

我可以创建一个LinkedHashMap,而previousTime只能iterate over the collection,直到我找到最接近的上一个日期。但最糟糕的情况是O(n)复杂性。 是否可以为这种任务提供更好的数据结构,或者只使用LinkedHashMap?像here这样的SortedMap?但最初的put代价很高,需要更多的记忆。

2 个答案:

答案 0 :(得分:5)

听起来像TreeMap这样String就像你正在寻找的那样。虽然您确实不应该使用Date形式的日期作为密钥...但请使用{{1}}本身。

答案 1 :(得分:0)

  

但最糟糕的情况是O(n)复杂性

这个有多大?我不认为这是一个问题,即使它是一百万。不仅如此,这可能是一个问题,但在你担心速度之前我猜你会先耗尽内存。只需从找不到要求日期的每5分钟开始向后迭代。