我是具有实现比较接口的自定义对象的多个ArrayLists。有可能这些多个列表具有相同的对象。我的要求是每个列表都可以有自己的顺序
例如:
列表1可以包含4个对象Obj2、Obj4、Obj1、Obj3列表2可以包含5个对象Obj4、Obj3、Obj5、Obj1、Obj2
如果我在List1中为每个自定义对象分配(0,1,2,3,4)的id,并在ArrayList上使用sort方法,我想如果我有一个单独的列表,它将对我起作用。
但是我不能这样做,因为对于List2,相同的对象需要不同的顺序。有没有一种方法,我可以使用比较器,并依赖于集合框架为我排序,而不是我必须为每个ArrayList维护一个单独的排序列表?
任何帮助都将不胜感激。
谢谢
发布于 2012-04-10 17:51:09
编写一个自定义比较器,然后使用Collections.sort(列表,比较器)。您可以有两个(或需要多少个)比较器,以便根据不同的参数对对象进行排序。
发布于 2012-04-10 17:52:26
使用自定义编写的比较器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-10 20:48:09
为了以不同的顺序保留列表,您需要有此列表的副本。如果只将多个引用保留在一个列表中,那么对一个引用进行排序也会影响其他引用。
不要担心一个列表有多个副本。列表本身也有作为参考的内容。因此,如果您从另一个列表创建一个新列表,您将创建该列表的副本,但不会创建列表中元素的副本。它们被保留在列表中作为参考,不会受到任何影响。
https://stackoverflow.com/questions/10093731
复制