【问题标题】:ArrayList sorting in javajava中的ArrayList排序
【发布时间】:2012-04-23 00:53:56
【问题描述】:

我是多个 ArrayList,其中包含实现 Comparator 接口的自定义对象。这些多个列表可能具有相同的对象。我的要求是每个列表都可以有自己的顺序

例如:

列表 1 可以包含 4 个对象 Obj2、Obj4、Obj1、Obj3 列表 2 可以包含 5 个对象 Obj4、Obj3、Obj5、Obj1、Obj2

如果我在 List1 中为每个自定义对象分配一个 (0,1,2,3,4) 的 id,并在 ArrayList 上使用 sort 方法,我认为如果我有一个 List,它将对我有用。

但我不能这样做,因为对于 List2,相同的对象需要以不同的顺序排列。有没有办法我可以使用比较器并依赖 Collections 框架为我排序,而不是我必须为每个 ArrayList 维护一个单独的订单列表?

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 你有一个比较器数组?您不是说一组 Comparables 吗?
  • 抱歉是 ArrayList of compares

标签: java sorting arraylist


【解决方案1】:

编写一个自定义比较器,然后使用 Collections.sort(list, 比较器)。您可以有两个(或您需要多少个)比较器,以允许您根据不同的参数对对象进行排序。

【讨论】:

    【解决方案2】:

    要么使用自定义编写的比较器 impl:

    Collections.sort(list, new Comparator<Comparable<?>>() {
            @Override
            public int compare(final Comparable o1, final Comparable o2) {
                // Compare two objects, might not be the same type
            }
        });
    

    或者,最好让所有被相互比较的类实现一个公共接口CustomComparableIntf,然后实现Comparable&lt;CustomComparableIntf&gt;,以便将它们作为该接口的实现进行比较,而不是它们的具体类型。

    【讨论】:

      【解决方案3】:

      为了以不同的顺序保存列表,您需要拥有此列表的副本。如果您只保留对一个列表的多个引用,那么对一个引用进行排序也会影响其他引用。

      不必担心一个列表有多个副本。列表本身也有内容作为参考。因此,如果您从另一个列表创建新列表,您将创建列表的副本,但不会创建列表中元素的副本。它们作为参考保存在列表中,不会受到任何影响。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-28
        • 2014-06-25
        • 1970-01-01
        • 1970-01-01
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多