Java对象的比较和排序(Comparator和Comparable)
我们都知道,数字之间很容易比较大小,那对象之间怎么比较大小呢?小声点...我来跟你们讲,在Java里面,实现Comparator和Comparable这两个接口,可以实现对对象比较大小。但是这两者之间又有什么区别呢?
comparator
1、这个接口类在java.util包里面,实现接口时需要导入该包。
2、一般新建一个类实现这个接口,用来比较其他对象的大小。实现这个接口时,对象不能把自己和其他对象相比较。
3、实现public int compare(Object o1, Object o2),
当实现类使用了泛型时,Object可以换成具体的类型。
comparable
1、接口类在java.lang包里面,实现接口时无需导包。
2、一般是需要比较大小的类直接实现这个接口,因为实现这个接口时,支持自己直接和另一个对象比较大小。
3、实现public int compareTo(Object o)
方法,当实现类使用了泛型时,Object也可以换成具体的类型。
代码如下:
两者两同点
两者所实现的函数的返回值一样,都是int类型的。另外注意一点当要对一堆对象按照某个属性进行比较大小排序时,返回值不同,会影响排序的顺序。例如本文中的,如果按照年龄的大小对Student进行排序时,如果按照从大到小的顺序进行排序时,compare的实现方法如下,代码见上面的图片:
1、前者大于被后者(也就是compare方法里面的对象),那么返回负整数
2、前者等于被后者,那么返回0
3、前者小于被后者,那么返回正整数
如果按照从小到大的顺序进行排序时,只需把1和3中的返回值互换。
实现排序的主函数如下所示:
最后提醒一下,特别特别注意两点:
1、集合转化成数组,数组的大小需要和集合的长度保持一致,如果数组过长,数组后面的值会被自动赋值null,在对数组进行排序时抛出NullPointerException
2、调用工具类Arrays里面的sort方法可以对数组排序,如果数组存放的是对象等复杂类型,需要对象实现comparable的compareTo方法
最后皮一下
现在把三个学生对象添加到集合list中,
1、把list赋值给集合copyList,
2、list转数组返回数组1,
3、通过for循环赋值给数组2,
现在对list集合进行排序操作,请问集合copyList和两个数组中的数据是否也把顺序排好了呢?
部分代码如下: