题解 | 集合排序
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Customer customer1 = new Customer("小明",scanner.nextInt());
Customer customer2 = new Customer("小军",scanner.nextInt());
Customer customer3 = new Customer("小红",scanner.nextInt());
List<Customer> customers = new ArrayList<>();
customers.add(customer1);
customers.add(customer2);
customers.add(customer3);
//write your code here......
Collections.sort(customers);
System.out.println(customers);
}
}
class Customer implements Comparable<Customer>{
private String name;
private int consumption;
public Customer(String name, int consumption) {
this.name = name;
this.consumption = consumption;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", consumption=" + consumption +
'}';
}
//write your code here......
public String getName() {
return name;
}
public int getConsumption() {
return consumption;
}
@Override
public int compareTo(Customer o) {
return o.consumption - this.consumption;
}
}
this.consumption - o.consumption:如果 this.consumption 大于 o.consumption,结果为正数。如果 this.consumption 等于 o.consumption,结果为零。如果 this.consumption 小于 o.consumption,结果为负数。
Collections.sort(customers); 调用了 Customer 类的 compareTo 方法来对 customers 列表进行排序。Collections.sort 方法会使用 Comparable 接口的 compareTo 方法来比较列表中的元素,并根据比较结果对列表进行排序。
@Override
public int compareTo(Customer o) {
return o.consumption - this.consumption;
}
- 这个方法定义了 Customer 对象之间的比较规则。
- o.consumption - this.consumption 的结果决定了两个 Customer 对象的顺序:如果结果为正数,表示 o 的消费大于 this 的消费,o 应该排在 this 前面。如果结果为零,表示 o 和 this 的消费相同。如果结果为负数,表示 o 的消费小于 this 的消费,o 应该排在 this 后面。
- 由于返回的是 o.consumption - this.consumption,这会导致列表按消费金额的降序排列。
Collections.sort(customers); Collections.sort 方法会遍历 customers 列表中的每个 Customer 对象。 对于每一对 Customer 对象,Collections.sort 会调用它们的 compareTo 方法来比较它们的大小。 根据 compareTo 方法的返回值,Collections.sort 会调整列表中元素的顺序,最终实现降序排序。
- Collections.sort 是一个通用的排序方法,用于对实现了 Comparable 接口的集合进行排序。
- 它会调用集合中每个元素的 compareTo 方法来比较元素的大小,并根据比较结果对集合进行排序。
- 在你的代码中,customers 是一个 List<Customer>,Customer 类实现了 Comparable<Customer> 接口,因此 Collections.sort 会使用 Customer 类的 compareTo 方法来排序。
@Override
public int compareTo(Customer o) {
return this.consumption - o.consumption; // 升序排序
}

深信服公司福利 891人发布