【问题标题】:Sort arraylist in X different ways at the same time同时以X种不同的方式对arraylist进行排序
【发布时间】:2016-07-13 13:18:57
【问题描述】:

如果我有一个自定义对象的 ArrayList,我需要能够以各种排序显示它们(例如 4 种排序类型,因此 4 个比较器使用对象的正确成员变量进行排序)什么是最有效的怎么办?
我不认为有例如根据特定比较器排序的对象的 4 个数组列表是最佳的。
还有比这更有效的方法吗?
请注意,我需要同时对这些对象进行排序,因为它们将显示在同一页面中。所以我不能按需排序

【问题讨论】:

  • 你在哪里显示这些?视图不应该进行排序(就像单击数据网格中的标题时一样)?
  • 你可以实现 4 种不同的Comparator,但是 AFAIK 你不能有相同的List 以不同的方式排序...
  • @Philippe:在 android 设备的 UI 中。好吧,视图可以进行排序,但如果可能的话,我想避免使用 4 个不同排序的相同对象列表
  • 如果您可以使用 Java8,您可以查看这些箔纸2016.java-forum-stuttgart.de/_data/D4_Wiedeking.pdf ...它们来自上周斯图加特的 Java 论坛,如果您翻到第 55 页(及之前)... . 您将找到一个完整的示例,如何使用 lambda 对任何类的各种属性进行排序。那些箔纸上的文字不多;所以我想你必须弄清楚他们是否对你有帮助。

标签: java sorting oop design-patterns


【解决方案1】:

您可以有不同的索引数组,其中包含作为原始ArrayList 索引的整数。这些可以按不同的方式排序。

要访问列表元素,请使用以下内容:

list.get(index1.get(i));

【讨论】:

  • 这意味着我需要 4 个排序的整数列表来表示数组列表的索引。考虑到 arraylist 存储对象的引用,并且我们基本上在排序过程中移动引用,这两种方法之间是否存在很大差异?
  • @Jim:是的,你是对的。在 Java 中没有显着差异。话虽如此,我怀疑是否有任何更有效的方法可以满足您的要求。
【解决方案2】:

我猜FlyWeight design pattern 可能符合您的期望。

享元模式主要用于减少创建的对象数量、减少内存占用和提高性能。这种类型的设计模式属于结构模式,因为这种模式提供了减少对象数量从而改善应用程序对象结构的方法。

由于您将对象保存在 ArrayList 中,因此您可以构建尽可能多的 ArrayList 来存储享元对象(基本上是 id、顺序)所需的不同种类。

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2017-03-29
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多