对于自定义类的类型进行比较就需要制定比较规则,就出现了这两种比较方式,区别就是:
Comparable比较器需要写在类内部,即需要排序的类需要继承此接口,然后在类内部重写compareTo方法,在主方法中调用Arrays.sort(需要排序的类名)或Collection.Sort(),在compareTo方法中定义排序规则(eg:根据特定的属性进行排序,由返回值确定)
Comparable详解
定义一个实现了Comparable接口的实现类:,重写CompareTo方法,用id作为排序依据(两数相减的顺序代表了正序或逆序)
调用时候,如果student是Array类型的话,就调用Array.sort(),这时候排序就会按照重写的compareTo的规则进行了排序了,否则就会报错,因为jvm不知道按照什么依据进行排序,而Integer或者String类型的数组本身已经在类里面实现了Comparable接口重写了compareTo方法:
Comparator详解
Compatator比较器是在使用的时候用匿名内部类的方式进行构造(可以灵活的制定排序规则),重写compare方法,也可以在自定义类中实现Compatator接口,重写compare方法
匿名内部类的实现方式:
Comparator最明显的优点就是比较灵活,具有较低的耦合性:
如果实现了comparator或者comparable的类,其类内部的排序规则不能够满足自己的排序要求的时候,就可以在外部调用Array.sort/Collection.sort的时候重写comparator的匿名内部类,按照自己的排序要求实现自定义排序;