繁体   English   中英

ArrayList 排序在 java

[英]ArrayList sorting in java

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

例如:

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

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

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

任何帮助将不胜感激。

谢谢

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

要么使用自定义的书面比较器实现:

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<CustomComparableIntf> ,以便将它们作为该接口的实现而不是它们的具体类型进行比较。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM