在Java编程中,接口Comparator是经常被使用的,比如向TreeSet和TressMap中放入元素时、对List进行排序时等都需要用Comparator指定排序规则!但是,具体怎么指定的好多人不太明白,我也不是很明白。现在把我理解的写出来,大家看对不对,互相讨论一下!
在使用Comparator接口时,我们要重写compare方法,真正的比较逻辑是compare方法中实现的。
在API文档中,对方法compare的说明如下:
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
第一个参数大于第二个参数时,返回一个正数。也就是说,在执行时,“执行器”(不知道叫什么,目前就这样叫吧!哈)它是根据返回值排序的,如果是正数,它认为第一个参数比第二个参数大,第一个参数排在第二个参数后面,反之。所以,为了实现我们想要的排序时,我们就要遵循这个逻辑!
实在不好表达,我们举个例子吧!
比如有一个Person对象,按age进行排序,如果我们想实现升序,在compare中比较时,我们就得让“正数=第一个参数排在后面”,和“年龄大的排在后面”相挂钩,返回第一个参数的年龄减去第二个参数的年龄就行。反之。
语言很难表达清楚。大家可以看看下面的例子体会一下: