【问题标题】:Algorithm for sorting Java objects into buckets, then sorting within buckets将 Java 对象排序到桶中,然后在桶中排序的算法
【发布时间】:2012-04-30 19:15:43
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我必须说我最终在一个完全不相关的领域做了同样的事情。 HashMap<BigDecimal, ArrayList<ArrayList<dataType>>>。它运行良好,即使每次添加新条目时都需要遍历 BigDecimal 键,以确保我不会重复值。

标签: java algorithm sorting predicate


【解决方案1】:

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

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

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

【讨论】:

  • 我认为我确实需要区分,因为我需要使用不同的适配器来添加到MergeAdapter,它可以处理视图和适配器的顺序数组......所以你说做排序预先,然后当我找到第一个新月份时,将其添加到新的数组列表中?
  • @jshin47 是的,基本上就是这样。只需将the first new month 替换为for every new month found 即可更准确。
猜你喜欢
  • 2021-03-23
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 1970-01-01
  • 2012-11-09
相关资源
最近更新 更多