我遇到了一个问题,我需要重新设计我的数据结构。
现在我按时间顺序提供了大量信息,并将其保存在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
代价很高,需要更多的记忆。
答案 0 :(得分:5)
听起来像TreeMap
这样String
就像你正在寻找的那样。虽然您确实不应该使用Date
形式的日期作为密钥...但请使用{{1}}本身。
答案 1 :(得分:0)
但最糟糕的情况是O(n)复杂性
这个有多大?我不认为这是一个问题,即使它是一百万。不仅如此,这可能是一个问题,但在你担心速度之前我猜你会先耗尽内存。只需从找不到要求日期的每5分钟开始向后迭代。