Arrays.sort(students,new Comparator<Student>()什么意思
时间: 2023-06-24 20:06:37 浏览: 56
这是使用 Java 语言中的 Arrays 类对数组进行排序时的一种方式。其中,students 是一个 Student 类型的数组,Comparator<Student> 是一个比较器对象,用于指定数组元素的排序规则。
具体来说,Comparator<Student> 中的 compare() 方法会根据指定的比较规则对两个 Student 对象进行比较,最终得出它们的大小关系。Arrays.sort() 方法会根据这些大小关系重新排列数组元素,使得数组中的元素按照指定的排序规则从小到大排列。
例如,如果我们想按照学生的成绩从高到低对一个 Student 类型的数组进行排序,可以这样写:
```
Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s2.getScore() - s1.getScore();
}
});
```
这里的比较器对象使用了一个匿名内部类,重写了 compare() 方法,使得该方法返回 s2.getScore() - s1.getScore() 的值,即按照成绩从高到低排序。
相关问题
Java中在Arrays.sort中使用Comparator的步骤
在 Java 中,我们可以使用 Arrays.sort() 方法来对数组进行排序。如果需要自定义排序规则,则可以使用 Comparator 接口来实现。下面是在 Arrays.sort() 中使用 Comparator 的步骤:
1. 创建 Comparator 实现类,该类实现 Comparator 接口,并重写 compare 方法。
2. 在 compare 方法中,编写自定义的对象比较逻辑。
3. 在需要排序的地方,使用 Arrays.sort() 方法,并传入 Comparator 实现类的对象作为参数。
4. 排序完成后,数组将按照自定义比较逻辑的顺序进行排序。
下面是一个使用 Arrays.sort() 和 Comparator 接口的示例代码:
```
public class Student {
private String name;
private int age;
private int score;
// 构造方法和 getter/setter 略
// 实现一个 Comparator 接口的比较方法
public static class ScoreComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
return s1.getScore() - s2.getScore();
}
}
public static void main(String[] args) {
Student[] students = new Student[]{
new Student("Tom", 18, 90),
new Student("Jerry", 20, 80),
new Student("Mickey", 19, 95)
};
// 使用自定义的 ScoreComparator 进行排序
Arrays.sort(students, new ScoreComparator());
// 输出排序结果
for (Student student : students) {
System.out.println(student.getName() + " " + student.getAge() + " " + student.getScore());
}
}
}
```
输出结果为:
```
Jerry 20 80
Tom 18 90
Mickey 19 95
```
Arrays.sort
Arrays.sort 是 Java 中用于对数组进行排序的方法。它可以对任意类型的数组进行排序,包括基本数据类型和对象类型。对于对象类型,需要实现 Comparable 接口或者传入一个 Comparator 对象来进行比较排序。
Arrays.sort 方法有多个重载形式,最常用的是对数组进行升序排序的方法:
```
public static void sort(int[] arr) // 对int类型数组进行排序
public static <T extends Comparable<? super T>> void sort(T[] a) // 对实现了Comparable接口的对象数组进行排序
public static <T> void sort(T[] a, Comparator<? super T> c) // 对任意类型的对象数组进行排序,需要传入一个Comparator对象进行比较排序
```
示例代码如下:
```
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [1, 1, 2, 3, 3, 4, 5, 5, 6, 9]
```
```
String[] arr = {"banana", "apple", "orange", "pear"};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [apple, banana, orange, pear]
```
```
List<Student> students = new ArrayList<>();
students.add(new Student("Tom", 20));
students.add(new Student("Jerry", 18));
students.add(new Student("Mike", 22));
students.add(new Student("Lucy", 19));
students.add(new Student("Bob", 21));
Comparator<Student> comparator = new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s1.getAge() - s2.getAge(); // 按照年龄升序排序
}
};
Collections.sort(students, comparator);
System.out.println(students);
```
注意,对于基本数据类型数组的排序,是按照升序进行排序。对于对象类型数组的排序,默认是按照对象的自然顺序进行排序。如果需要按照其他方式进行排序,则需要传入 Comparator 对象来进行比较排序。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)