美文网首页
java比较器:comparable以及comparator区别

java比较器:comparable以及comparator区别

作者: callme周小伦 | 来源:发表于2019-10-21 22:41 被阅读0次

    首先可以参照这篇文件来了解两种比较器的区别
    内部比较器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()][]);
        }
    }
    

    相关文章

      网友评论

          本文标题:java比较器:comparable以及comparator区别

          本文链接:https://www.haomeiwen.com/subject/iinxvctx.html