compareTo()
是java.lang.Comparable接口中的方法,当需要对某个类的对象进行排序时,该类需要实现Comparable接口的,必须重写public int compare()方法
该方法用于两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较,compareTO底层是compare()方法
强行将实现它的每一个类的对象进行整体排序(称为该类的自然排序),实现此接口的对象列表和数组可以用Collections.sort(),和Arrays.sort()进行自动排序
例如arrayList排序时 Collections.sort(list) 会自动调用User实现的Comparable的compareTo()方法 Comparator comparator = new Comparator() { @Override public int compare(User user0, User user1) { return user0.id.compareTo(user1.id); } }; Collections.sort(list, comparator)//也可以重新实现排序的方法
使用
public int compareTo( NumberSubClass referenceName )
- 参数
referenceName – 可以是一个 Byte, Double, Integer, Float, Long 或 Short 类型的参数。 - 返回值
如果指定的数与参数相等返回0。
如果指定的数小于参数返回 -1。
如果指定的数大于参数返回 1。
compare()
compare(Object o1,Object o2)方法是java.util.Comparator接口的方法
它则是针对本身没有比较能力的对象(数组)为它们实现比较的功能,所以它叫做比较器,是一个外部的东西,通过它定义比较的方式,再传到Collection.sort()和Arrays.sort()中对目标排序,而且通过自身的方法compare()定义比较的内容和结果的升降序
Comparator接口的重写,这个接口就一个抽象函数,给出的参数与返回值都是定死的
Collections.sort(studentArr, new Comparator<Object>() { public int compare(Object o1, Object o2) { //你首先设置你要比较的东西 //具体是把参数中的Object强制转换成你要比较的东西,这里是两个Student类 //这里的s1,s2与上面的s1,s2一点关系都没有,只是抽象的前者与后者的关系 Student s1 = (Student) o1; Student s2 = (Student) o2; //如果前者的学号大于后者的学号,就是前者大于后者,返回1系统就会识别是前者大于后者 if (s1.s_no > s2.s_no) { return 1; } //小于同理 if (s1.s_no < s2.s_no) { return -1; } //如果返回0则认为前者与后者相等 return 0;
Collections.sort()重写
对于集合中使用的自定义类型,进行排序时需要自定义比较器
匿名内部类重写
Collections.sort(voList, new Comparator<Subnet>() {
@Override
public int compare(Subnet o1, Subnet o2) {
return o1.getName().compareTo(o2.getName());
}
});
Lambda重写
Collections.sort(voList, (o1, o2) -> o1.getName().compareTo(o2.getName()));
版权声明:本文为weixin_44417042原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。