java比较器:comparable以及comparator区别

2019-10-21  本文已影响0人  callme周小伦

首先可以参照这篇文件来了解两种比较器的区别
内部比较器Comparable和外部比较器Comparator

这里主要记录一下基本类型的比较,我们以Integer为例,参看源码:
public final class Integer extends Number implements Comparable<Integer>
Integer已经实现了接口 Comparable<Integer>,重写compareTo函数
public int compareTo(Integer anotherInteger) { return compare(this.value, anotherInteger.value); }
因此我们可以直接对Integer进行排序,同时在Integer发现静态函数
public static int compare(int x, int y) { return (x < y) ? -1 : ((x == y) ? 0 : 1); }
这里,以leetcode上56题为例实现一下外部比较器

class Solution {
    public int[][] merge(int[][] intervals) {
        if (intervals == null || intervals.length == 0) {
            return new int[0][];
        }
        Arrays.sort(intervals, new Comparator<int[]>(){
            public int compare(int[] a,int[] b){
                // return Integer.compare(a[0],b[0]);  //调用静态函数
                //采用内部比较器的比较函数,以对象调用该函数,因此我们先进行装箱
                //进一步探究发现CompareTo调用了Compare静态函数
                // return Integer.valueOf(a[0]).compareTo(b[0]);
                return a[0] -b[0]; //比上面效率更高?
            }
        });
        
        ArrayList<int[]> res = new ArrayList<>();
        int[] preInterval = intervals[0];
        res.add(preInterval);
        for(int[] currentInterval: intervals){
            if(preInterval[1] < currentInterval[0]){
                res.add(currentInterval);
                preInterval = currentInterval;
            }
            else{
                preInterval[1] = Math.max(preInterval[1], currentInterval[1]);
            }
        }
        
        return res.toArray(new int[res.size()][]);
    }
}
上一篇下一篇

猜你喜欢

热点阅读