【发布时间】:2019-12-29 14:58:03
【问题描述】:
我有大约一年的 Java 编码经验。为了磨练我的技能,我正在尝试用 Java 编写日历/日记条目桌面应用程序。我已经意识到我仍然没有数据持久性方面的经验,并且仍然不真正理解该程序的数据持久性选项是什么——所以也许我在抢先一步,以及我希望的设计选择一旦我进入细节,实施甚至都不适用。
我主要想编写一个日历应用程序,允许您记录日常日记条目以及相关的活动日志,以了解在日常任务上花费的时间。在添加、编辑和查看日志条目方面,使用哈希表,条目的日期作为键,条目本身作为值,似乎是最高效的(O(1) 平均情况,每个使用哈希表)。
不过,我也希望实现一项功能,该功能可以在给定特定日期范围的情况下,提供对每天在特定任务上花费的平均时间量的简单分析。如果这是我感兴趣的主要功能之一,那么我认为排序数组可能会更有效率,我错了吗?特别是考虑到数据条目通常预计已经按日期添加。
或者也许还有其他我不知道的选项?
我问的原因是因为以下问题提供的答案:Why not use hashing/hash tables for everything?
我不确定我是否问对了问题的原因是因为以下问题的答案:Whats the best data structure for a calendar / day planner?
如果是这样,我真的很感激能获得有关 java 数据持久性的其他资源。
感谢您的帮助!
【问题讨论】:
-
对于只有几个条目的桌面应用程序,我怀疑会有任何显着差异:您的日历中不会有数百万个条目。但是您没有考虑过的一个选项是 TreeMap,它具有 O(log N) 查找/插入时间,并且还允许有效地获取包含一系列条目的子图。不过,我不明白这与坚持有什么关系。这些集合都不是持久的。您需要以某种方式读取它们的元素并将其写入持久存储,但这与您选择使用的集合没有太大关系。
-
在这种特殊情况下,它们似乎都是 O(N),因为要获取
HashTable的键,您仍然需要遍历整个表。排序后的数组可能适合您的目标(特别是因为您无法保证在 HashTable 上按排序顺序显示的日期)
标签: java algorithm sorting hashtable data-persistence