我需要一个可以正确建模时间块(例如约会)的数据结构。例如,每个约会都有一个开始时间和一个结束时间。我需要非常快速地访问以下内容:
指定的开始时间和结束时间是否与现有事件发生冲突?
从指定的开始时间和结束时间开始存在哪些事件?
理想情况下,数据结构可以对下图进行建模。
我曾考虑使用二叉搜索树(例如Java的TreeMap
),但我想不出要使用什么 key 或 value 。是否有单个数据结构或数据结构组合在建模方面很强?
答案 0 :(得分:0)
番石榴Table
可能适用于您的用例,具体取决于您要在其上建立什么索引。
幼稚的方法是先按名称先索引,然后再索引一天中的时间,然后不管该特定区域是否被该特定人员占用,都具有一个值。
这将使对象的实例化成为...
Table<String, LocalDateTime, Boolean> calendar = TreeBasedTable.create();
您将以给定的时间间隔填充每个人的分配。您可以设置该间隔是什么-如果间隔分为15、30或1小时(如表所定义)。
要查找是否已占用时间,请查找与要安排人员的时间最接近的时间间隔。为此,您可以使用column()
方法来查看是否有任何个可用性,或者您可以确定具体性并为个人获取一行。这意味着您必须提取两个值。您想要的开始时间,无论间隔多长时间。我将不得不把那部分作为练习留给读者。