什么时候用compartor什么时候用comparable
时间: 2023-10-25 19:09:19 浏览: 41
Comparator和Comparable都是Java中用于排序的接口。
Comparable接口是自然排序,即实现该接口的类可以直接比较自身和另一个对象的大小。如果我们想让我们的类实现自然排序,就可以实现Comparable接口并重写compareTo方法。例如,我们可以实现Comparable接口来对数字进行自然排序。
Comparator接口提供了一种比较两个对象大小的方法,它与Comparable接口不同之处在于,Comparator是在类外部实现的,而Comparable是在类内部实现的。我们可以实现Comparator接口并重写compare方法来对类进行排序,这种方式适用于我们无法改变类本身的源代码的情况。
因此,如果我们要对自己编写的类进行排序,而且可以修改该类的源代码,则最好实现Comparable接口。如果我们无法修改该类的源代码,则可以使用Comparator接口和外部比较器对其进行排序。
相关问题
compartor和comparable
Comparator和Comparable都是Java中用于比较对象的接口。
Comparable接口是Java中的一个内置接口,它定义了一个compareTo()方法,用于比较对象的大小。实现了Comparable接口的类可以通过Collections.sort()方法进行排序。
Comparator接口也是Java中的一个接口,它定义了一个compare()方法,用于比较两个对象的大小。Comparator接口可以用于对任意类进行排序,而不需要修改类本身。
总的来说,Comparable是在类内部实现的比较,而Comparator是在类外部实现的比较。
compartor.comparing
comparator.comparing方法是Java 8中的一个静态方法,用于创建一个Comparator对象,以便对对象进行比较。它接受一个Function参数,用于提取对象的某个属性进行比较。
例如,假设我们有一个Person类,其中包含两个属性:姓名和年龄。我们可以使用comparator.comparing方法来创建一个按照姓名属性进行比较的Comparator对象,如下所示:
```
Comparator<Person> byName = Comparator.comparing(Person::getName);
```
然后,我们可以使用这个Comparator对象来对Person对象进行排序,例如:
```
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 25));
people.add(new Person("Bob", 30));
people.add(new Person("Carol", 20));
Collections.sort(people, byName);
```
在上面的例子中,通过comparator.comparing方法创建了一个按照姓名属性进行比较的Comparator对象,并将其传递给Collections.sort方法,以便对people列表进行排序。
阅读全文