给出两个比较器的排序数组?

Jac*_*ack 8 java comparison

假设我有两个比较器,主要和次要.如何首先通过主比较器对数组进行排序,然后通过辅助进行排序?

假设每个对象都有一个名称和一个数字字段.

喜欢

Bob 1
Bob 2
Jack 1
Jack 2
Run Code Online (Sandbox Code Playgroud)

没有创建新的比较器是否可能?

Nay*_*uki 10

是的,您可以在不创建新比较器的情况下完成排序.

有一个众所周知的主要领域,二级,三级等分类技巧:首先按最不重要的字段(第三级)排序,然后是下一个重要字段(次级),最后是最重要的字段(主要).但是排序算法需要稳定才能实现.

如果要对数组进行排序,请使用Arrays.sort().如果您正在排序List,请使用Collections.sort().这两种方法都保证稳定.

假设您的主比较器对象存储在变量中primaryComp,而辅助对象存储在变量中secondaryComp.然后这里有一些代码来完成你想要的:

Arrays.sort(mylist, secondaryComp);  // This must come first!
Arrays.sort(mylist, primaryComp);
Run Code Online (Sandbox Code Playgroud)


Evg*_*eev 7

假设你的班级是

class X {
    String name;
    int num;
}
Run Code Online (Sandbox Code Playgroud)

然后排序将

Arrays.sort(x, new Comparator<X>() {
        @Override
        public int compare(X o1, X o2) {
            if (o1.name.equals(o2.name)) {
                return Integer.compare(o1.num, o2.num);
            }
            return o1.name.compareTo(o2.name);
        }});
Run Code Online (Sandbox Code Playgroud)