楼主的问题明显是java中集合中的两种排序方式:自然排序和定制排序
那么我们是不是也可以在自己的类里面定义一个ComparaTo方法来进行比较,排序呢?它和比较器有区别吗?
1.自然排序:java.lang.Comparable
Comparable 接口中只提供了一个方法: compareTo(Object obj) ,该方法的返回值是 int 。
如果返回值为正数,则表示当前对象(调用该方法的对象)比 obj 对象“大”;反之“小”;如果为零的话,则表示两对象相等
2.比较器排序:java.util.Comparator
有时需要对同一对象进行多种不同方式的排序,就要提供比较器排序接口,这点自然排序 Comparable 不能实现。
另外,Comparator 接口的一个好处是将比较排序算法和具体的实体类分离了。
定义一个ComparaTo方法,完成的依然是对数据本身进行比较,仍然是属于对象自身的自然排序
例如:集合中的String类型的数据,比较较基于String类型中自身各个字符的 Unicode 值进行比较
又比如你定义了一个学生类,类里面有name age,两个属性,你可以自定义ComparaTo方法,对这个学生类
中的对象按name或者age属性值进行比较排序,仍然是按照对象数据本身的可比性进行比较。所以属于自然排序
而Comparator是一个专用的比较器,当这个对象本身不具备可比性或者上面的ComparaTo方法无法满足你的要求时
你可以用Comparator来完成,它不是按对象自身的可比性进行排序的,而是根据你的需求定义一个外部程序
来完成比较。
总之一句话:Comparable是内部比较,而比较器Comparator是外部比较
|