0

我需要一个ArrayList<Conference> conferences,其中Conference包含一个public Date beginDate参数,并按如下方式排序:首先,将会议分成代表唯一月份的存储桶beginDate,然后beginDate在存储桶中对其自身进行排序。我确信这是一个常见的需求,所以我希望这里有人能提供一些建议。

我的想法如下。请告诉我为什么它是次优的:)

  1. 创建一个HashMap<Date, ArrayList<Conference>>.
  2. 迭代conferences并使用一个特殊的静态函数来查找他们的月份的第一天beginDate,检查是否有一个ArrayList<Conference>for that Date。然后将它们添加到ArrayList那个Date(应该都是一样的,因为first_day_of_month(any_day_in_month)是一样的。
  3. 遍历每个ArrayList成员HashMap并使用标准排序过程对ArrayList按日期进行排序。

这似乎比必要的复杂,但请让我知道它为什么不好以及可以做些什么来解决它。

编辑:另外,如果重要的话,我最终需要将所有这些添加ArrayList回一个ArrayAdapter将进入 commonsware 的MergeAdapter... :(

4

1 回答 1

3

如果您从一开始就按日期排序,那么无论哪种方式,月份的条目都将是后续的。在初始排序之后,您可以遍历所有条目并在条目是新月份的第一个条目时进行人工“拆分”。我什至不确定您是否需要进行这种区分(也许是因为这个问题有点含糊)。

所提出算法的总复杂度为O(nlog n),其中n为元素个数,当然没有更好的解决方案。

注意顺便说一句,此算法在操作复杂性方面优于您提出的算法。

于 2012-04-30T19:25:04.557 回答