用于将Java对象排序到存储桶,然后在存储桶内排序的算法

时间:2012-04-30 19:15:44

标签: java algorithm sorting predicate

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

我的想法如下。请告诉我为什么它不是最佳的:)

  1. 创建beginDate
  2. HashMap<Date, ArrayList<Conference>>进行迭代并使用特殊的静态函数查找conferences月份的第一天,检查beginDate是否有ArrayList<Conference>。然后将它们添加到Date的{​​{1}}(由于ArrayList相同,所以它们都应该相同。
  3. Date的{​​{1}}成员进行迭代,并使用标准排序程序按日期对first_day_of_month(any_day_in_month)进行排序。
  4. 这似乎比必要的更复杂,但请让我知道为什么它很糟糕,可以做些什么来解决它。

    编辑:此外,如果重要,我最终还是需要将所有这些ArrayList添加回HashMap,这将进入commonsware的ArrayList ... :(

1 个答案:

答案 0 :(得分:3)

如果您从最开始按日期排序,则该月份的参赛作品将随后进行。在初始排序之后,您可以迭代所有条目,并在条目是新月的第一个条目时进行人工“拆分”。我甚至不确定你是否需要做这种区分(可能因为这个问题有点模糊)。

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

注意顺便说一下,这个算法比你在操作复杂性上提出的算法要好。