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()][]);
}
}