java中利用Comparator接口实现自定义排序技巧。

时间:2021-09-06 22:12:28
    在实际中,我们常常要实现一些比较奇怪的排序。

例如,在一组数[1,3,5,8,4,6,5],保持原有顺序不变的情况下,按照大小排一次序。并且建立映射关系。(排序后用O(1)复杂度来查询第i大的数在原数组的位置)
例如这样
index 0 1 2 3 4 5 6
arr 1 3 5 8 4 6 5
sort 6 5 2 0 4 1 3

    对于算法党来说,这时候可以手撕一个快排或者归并之类的。(但是如果是在比赛中,就没这个时间了。)
       这时候哇,我们就得充分利用jdk.
指的就是Arrays.sort(T[] a, Comparator<? super T> c))这个方法!

下面是示例...
package sorts;

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

public class ArraySortTest {

    static class Array_test{
        int be_sort;
        public Array_test(int be_sort) {
            this.be_sort = be_sort;
        }
    }

    public static void main(String[] args) {

        int[] arr_test = {10,2,6,9,60,47,8,5,6,1};

        Array_test[] arr = new Array_test[arr_test.length];
        for(int i = 0 ; i<arr.length ; i++){
            arr[i] = new Array_test(arr_test[i]); 
        }
        Arrays.sort(arr, new Comparator<Array_test>() {
            public int compare(Array_test o1, Array_test o2) {
                return o1.be_sort - o2.be_sort;
            }
        });
        System.out.print("[");
        for(int i = 0 ; i<arr.length-1 ;i++){
            System.out.print(arr[i].be_sort+" ,");
        }
        System.out.print(arr[arr.length-1].be_sort);
        System.out.println("]");
    }
}