【Java】Arrays类中的sort()方法改写

Arrays.sort()方法虽然功能强大,但是在平常的使用中难免会出现各种情况使得其无法满足我们的需求,这个时候就该用到:

Arrays.sort(a, fromIndex, toIndex, c);

这种用法了


先对方法中的各项参数进行解释:

a——需要进行排序的对象

fromIndex——排序进行的起始位置

toIndex——排序的终止位置

c——自定义的排序规则


实现的代码如下:


import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

//定义类a
class a{
    int n;
}

//定义类cmp,制定排序规则
class cmp implements Comparator<a>{

    public int compare(a A, a B) {
        if(A.n > B.n)return -1;
        if(A.n == B.n)return 0;
        if(A.n < B.n)return 1;
        return 0;
    }

}

public class Main{

    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            a t[] = new a [n];
            for(int i = 0;i < n;i++){
                t[i] = new a();//为类分配内存必不可少
                t[i].n = sc.nextInt();
            }
            Arrays.sort(t,0,n,new cmp());
            for(int i = 0;i < n;i++)
                System.out.print(t[i].n+" ");
            System.out.println();
        }
    }
}

它的效果是对含有一个int型成员变量n的类a的数组按n的大小进行降序排序


在上面给出的代码中,最为关键的地方在于这一段:


//定义类cmp,制定排序规则
class cmp implements Comparator<a>{

    public int compare(a A, a B) {
        if(A.n > B.n)return -1;
        if(A.n == B.n)return 0;
        if(A.n < B.n)return 1;
        return 0;
    }

}

在compare()方法中,对类a进行排序的基准是类a中的成员变量n的大小,如上所说,这里演示的返还方式对应的是降序排列,反之则是升序,实际应用中还可以有更多的变化,可以完全不只是仅有一个参数参与的排序


PS:如果方法的应用对象是类,那么对于每一个对象来说,这一段都是必不可少的:

t[i] = new a();//为类分配内存必不可少

绝对不能少!绝对不能少!绝对不能少!(很重要所以说三遍)

猜你喜欢

转载自blog.csdn.net/Jourofant/article/details/81054249