用java代码举例说明Comparable 和 Comparator 的区别
时间: 2023-04-07 21:01:29 浏览: 67
Comparable和Comparator都是Java中用于比较对象的接口,但它们的使用场景不同。
Comparable接口是在类内部实现的,用于对当前类的对象进行比较。实现Comparable接口的类可以使用Arrays.sort()或Collections.sort()方法进行排序。
Comparator接口是在类外部实现的,用于对不同类的对象进行比较。实现Comparator接口的类可以作为参数传递给Arrays.sort()或Collections.sort()方法进行排序。
举个例子,假设我们有一个Person类,它有name和age两个属性。如果我们想按照age属性进行排序,我们可以让Person类实现Comparable接口,然后重写compareTo()方法:
```
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 int compareTo(Person other) {
return Integer.compare(this.age, other.age);
}
}
```
现在我们可以使用Arrays.sort()方法对Person对象进行排序:
```
Person[] people = new Person[] {
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 20)
};
Arrays.sort(people);
for (Person person : people) {
System.out.println(person.getName() + " " + person.getAge());
}
```
输出结果为:
```
Charlie 20
Alice 25
Bob 30
```
如果我们想按照name属性进行排序,我们可以创建一个实现Comparator接口的类,然后重写compare()方法:
```
public class NameComparator implements Comparator<Person> {
public int compare(Person a, Person b) {
return a.getName().compareTo(b.getName());
}
}
```
现在我们可以使用Arrays.sort()方法和NameComparator类对Person对象进行排序:
```
Person[] people = new Person[] {
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 20)
};
Arrays.sort(people, new NameComparator());
for (Person person : people) {
System.out.println(person.getName() + " " + person.getAge());
}
```
输出结果为:
```
Alice 25
Bob 30
Charlie 20
```
这就是Comparable和Comparator的区别。