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

Sky*_*zer 0 java map data-structures

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

现在我按时间顺序有很多信息,并将其保存在Hashmap中,其中key 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())
}
Run Code Online (Sandbox Code Playgroud)

我可以创建一个LinkedHashMap,previousTime可以迭代集合,直到我找到最接近的上一个日期.但最糟糕的情况是O(n)复杂性.是否可以为这种任务提供更好的数据结构,或者只使用LinkedHashMap?的SortedMap喜欢这里?但是最初的put代价很高,需要更多的内存.

Col*_*inD 5

听起来像NavigableMap就像TreeMap你正在寻找的那样.虽然你真的不应该使用String日期的形式作为你的钥匙......使用它Date自己.