Comparator用法中o1-o2的问题

为什么o1-o2就是升序,o2-o1就是降序呢?

因为在comparator里面,-1代表小于,0代表等于,1代表大于
你这样写的话,应该只是按照长度排序吧
在进行比较的时候需要返回-1或者0,如果不是就需要交换,
你写的o1代表前一个元素,o2代表后一个元素
也就代表前一个元素必须小于后一个元素,在这里也就是前一个比后一个短
如果你要从大到小,就改成o2-o1,也就是o2-o1需要返回-1,那么前面就比后面大了

o1值的是集合中的第一个对象

o2是第二个对象

当遍历到第一个对象o1的时候 去减o2 如果是负数或者0 就不需要换位置,如果是整数就换位置

所以就是升序

反之 o2-o1的时候 如果是负数或者0不需要换位置,所以一定是降序。

这个排序是系统写好的,你只需要实现comparator,给他一个比较的函数,返回-1,0,1就可以了,具体怎么实现这个函数是由你定的,系统只考虑返回结果

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
问题!虽然 `Comparable` 和 `Comparator` 都可以用来比较对象,但它们有一些区别。 `Comparable` 是一个接口,它定义了一个 `compareTo()` 方法,用于比较对象的自然顺序。自然顺序是指对象本身就有的顺序,比如数字的大小、字母的顺序等。如果一个类实现了 `Comparable` 接口,那么它的对象就可以使用 `Arrays.sort()` 或 `Collections.sort()` 方法进行排序了。这个方法只能由类本身去实现,因此它只能定义一种排序方式。 举一个例子,假设我们有一个 `Person` 类,它实现了 `Comparable` 接口,按照年龄从小到大排序: ```java public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } // 实现 compareTo 方法 @Override public int compareTo(Person o) { return this.age - o.getAge(); } } ``` 然后我们可以使用 `Collections.sort()` 方法对 `Person` 对象进行排序: ```java List<Person> persons = new ArrayList<>(); persons.add(new Person("Tom", 20)); persons.add(new Person("Jerry", 18)); persons.add(new Person("Alice", 22)); Collections.sort(persons); ``` 这样就按照年龄从小到大排序了。 相比之下,`Comparator` 是一个接口,它定义了一个 `compare()` 方法,用于比较对象的次序。次序可以是任意的,不一定是对象的自然顺序。如果一个类需要多种排序方式,可以实现多个 `Comparator` 接口。这个方法可以由类外部去实现,因此它可以定义多种排序方式。 假设我们有一个 `Person` 类,我们可以按照姓名字母顺序排序: ```java public class NameComparator implements Comparator<Person> { @Override public int compare(Person o1, Person o2) { return o1.getName().compareTo(o2.getName()); } } ``` 然后我们可以使用 `Collections.sort()` 方法并传入 `NameComparator` 对象对 `Person` 对象进行排序: ```java List<Person> persons = new ArrayList<>(); persons.add(new Person("Tom", 20)); persons.add(new Person("Jerry", 18)); persons.add(new Person("Alice", 22)); Collections.sort(persons, new NameComparator()); ``` 这样就按照姓名字母顺序排序了。 综上所述,`Comparable` 是用来定义对象的自然排序顺序,只能由类本身去实现;`Comparator` 是用来定义对象的次序,可以由类外部去实现,可以定义多种排序方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值