排序数组与哈希表:在日历应用程序中搜索一系列日期时,哪种数据结构会更有效?

Mac*_*ord 3 java sorting algorithm hashtable data-persistence

我有大约一年的Java编码经验。为了磨练我的技能,我试图用Java编写一个Calendar / journal entry桌面应用程序。我已经意识到我仍然没有数据持久性方面的经验,并且仍然不真正了解该程序的数据持久性选项是什么-所以也许我正在追赶潮流,并希望做一些设计选择一旦陷入困境,实施甚至都不适用。

我主要想编写一个日历应用程序,该程序可让您记录每日日记条目以及相关的活动日志,以记录在日常任务上花费的时间。在添加,编辑和查看日记帐分录方面,使用以表项的日期为键并将表项本身作为值的哈希表似乎是最有效的Big-Oh(对于使用哈希表的每个表,平均效率为O(1) )。

但是,我也希望实现一种功能,该功能可以在给定特定日期范围的情况下,对每天在某些任务上花费的平均时间进行简单分析。如果这是我感兴趣的主要功能之一,那么我想错了吗?也许排序数组会更高效?特别是考虑到数据条目通常应该逐日添加。

也许还有我不知道的另一种选择?

我问的原因是由于以下问题提供的答案:为什么不对所有内容使用哈希/哈希表?

我不确定是否要问正确的问题的原因是因为以下问题的答案:日历/日程安排者的最佳数据结构是什么?

如果是这样的话,我将不胜感激地将其他资源用于Java中的数据持久性。

感谢您的帮助!

eri*_*son 6

使用一个NavigableMap接口(由TreeMap,一棵红黑树实现)。

这使您可以轻松有效地选择日期范围,并按关键顺序遍历事件。

顺便说一句,如果您认为时间或日期间隔是“半开放的”,它将使许多问题变得更加容易。也就是说,选择事件时,将结果的下限包括在内,但将上限排除在外。的方法(NavigableMapsubMap())被设计为以这种方式工作,并且当您处理任意数量的间隔时,这是一个好习惯,因为很容易定义没有重叠或间隙的间隔序列。

  • 对你的“旁白”说一千遍。 (2认同)