Comparator

Comparator is an interface, we can override the compare method to customize our sorting

对于数组、链表、堆等结构,标准库中排序方法,往往是对于基本类型的升序排序,有的时候,不一定能满足我们的要求。例如我们有一些特殊的顺序要求,或待排序的对象类型不是基本类型。此时,就需用到自定义排序。自定义排序可以用在很多地方,比如数组排序,堆的排序规则等。Java实现自定义排序,主要有两种方法:

1.实现Comparable接口:

Interval区间为例,在定义该类时,让其实现Comparable,并重写其中的compareTo方法,使得Interval类可以进行大小比较,这样也可实现自定义的排序:

class Interval implements Comparable<Interval> {
    int left, right;
    Interval(int left, int right) {
        this.left = left;
        this.right = right;
    }

    @Override
    public int compareTo(Interval o) {
        return this.left - o.left;
    }
}

这样,在其他地方就可以直接对Interval对象的大小进行比较。完整的测试方法如下:

import java.util.ArrayList;
import java.util.List;
import static java.util.Collections.sort;

// Interval类如上

public class Main {
    public static void main(String[] args) {
        List<Interval> A = new ArrayList<>();
        A.add(new Interval(1, 7));
        A.add(new Interval(5, 6));
        A.add(new Interval(3, 4));
        System.out.println("Before sort:");
        for (Interval i : A)
            System.out.println("(" + i.left + ", " + i.right + ")");

        sort(A);
        System.out.println("After sort:");
        for (Interval i : A)
            System.out.println("(" + i.left + ", " + i.right + ")");
    }
}

输出可以自行观察,不再赘述。

2.定义比较类:

该方法定义一个新的比较类,使其继承自Comparator,并完善其中的compare()方法。在调用时,使用该比较类进行比较。仍以Interval为例:

要对List<Interval> A进行排序时,调用如下方法,填入一个比较类的对象即可:

原生数组

Coding Problem

Description

Give a new alphabet, such as {c,b,a,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}. Sort the string array according to the new alphabet

Given Alphabet ={c,b,a,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}, String array ={cab,cba,abc}, return{cba,cab,abc}.

Given Alphabet ={z,b,a,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,c}, String array ={bca,czb,za,zba,ade}, return{zba,za,bca,ade,czb}.

Sort by Frequency:

Last updated