【问题标题】:Sort ArrayList with Object's property使用对象的属性对 ArrayList 进行排序
【发布时间】:2015-02-23 11:25:09
【问题描述】:

这是一个有趣的隐喻问题:
假设我有一份人员列表,这些人员是爷爷、父亲和孩子。

Eg:(badly scrambled)
[Kid1, Kid2, GrandPa2, GrandPa3, Father1, Father3, Kid4, Father4, kid5] 

我想对它们进行排序:

[Father1-Kid1, GrandPa2, Kid2, GrandPa3-Father3, Father4-Kid4, Kid5]

只需将上面列表的 - 替换为 ,它毕竟是一个列表。

我怎样才能这样排序?我尝试了 Comparator,它变得非常复杂,许多匹配会影响性能。

PS- 我工作的环境中,每毫秒 JVM 花费都被考虑在内,请指导我通过一些最佳方式。

注意:不能使用 List 以外的任何东西。

到目前为止我做了什么:
将所有爷爷放在一个列表中,然后将父亲附加到相关的爷爷索引中,对孩子也是如此。我猜这很好用,能更快吗?

【问题讨论】:

  • 你有没有尝试过?关于您的优化,首先要专注于让它发挥作用。
  • 一台计算机可以在一毫秒内执行 5000 万条指令。对于计算机来说,一毫秒是很长的时间。
  • 发布您尝试过的比较器。
  • 在 Java 7 或更早的版本中,可以编写一个 Comparator 来进行大约 10 行的排序。在 Java 8 中,它变成了一行。我不会简单地发布答案,因为这看起来像是家庭作业。但是,如果您在尝试过的事情上需要帮助,请发布它,也许我们可以提供帮助。

标签: java sorting arraylist collections


【解决方案1】:

也许您不应该使用列表。使用一些树结构来表示元素的层次结构(如果某些元素不相关,则使用森林)。然后遍历该树可以按您希望的顺序生成元素。

【讨论】:

  • 他说他必须使用List,所以这对我来说就像家庭作业。
【解决方案2】:

您可以按编号将所有条目分组到一个 id 的集合列表中。例如以1 结尾的所有内容都进入列表[1],以2 结尾的所有内容都进入列表[2]。条目排序后,您可以根据需要合并这些条目。

这应该会给你接近 O(N) 的时间。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2011-02-16
    相关资源
    最近更新 更多