0

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

例如:

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

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

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

任何帮助将不胜感激。

谢谢

4

3 回答 3

1

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

于 2012-04-10T17:51:09.330 回答
0

要么使用自定义编写的比较器 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<CustomComparableIntf>,以便将它们作为该接口的实现进行比较,而不是它们的具体类型。

于 2012-04-10T17:52:25.670 回答
0

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

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

于 2012-04-10T20:48:08.797 回答