Java中数组排序函数sort的用法包括自定义排序方法
Java中的Arrays类提供了许多有用的数组操作方法,其中包括对数组进行排序的方法sort。sort方法可以对数组进行升序或降序排序,以及对自定义的对象进行排序。本文将详细介绍sort方法的用法,包括自定义排序方法。
1. 对基本数据类型数组排序
对基本数据类型数组进行排序非常简单,只需要调用sort方法即可。sort方法有两个重载,一个接收数组参数,一个接收数组和排序方式(升序或降序)两个参数。
示例代码如下:
int[] arr = {3, 7, 1, 9, 2};
Arrays.sort(arr); // 升序排序
System.out.println(Arrays.toString(arr)); // [1, 2, 3, 7, 9]
Arrays.sort(arr, Collections.reverseOrder()); // 降序排序
System.out.println(Arrays.toString(arr)); // [9, 7, 3, 2, 1]
2. 对对象数组排序
对对象数组排序需要借助于Comparable接口,该接口定义了一个compareTo方法,该方法将对象与另一个对象进行比较。将数组中的对象实现Comparable接口,然后调用sort方法即可对对象数组进行排序。
示例代码如下:
class Student implements Comparable<Student> {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student o) {
return this.age - o.getAge();
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Main {
public static void main(String[] args) {
Student[] students = new Student[3];
students[0] = new Student();
students[0].setName("Tom");
students[0].setAge(18);
students[1] = new Student();
students[1].setName("Jerry");
students[1].setAge(20);
students[2] = new Student();
students[2].setName("Bob");
students[2].setAge(16);
Arrays.sort(students);
System.out.println(Arrays.toString(students));
}
}
输出结果:
[Student{name='Bob', age=16}, Student{name='Tom', age=18}, Student{name='Jerry', age=20}]
可以看到,对象数组已经按照年龄进行了升序排序。如果要进行降序排序,则需要稍微修改一下compareTo方法:
@Override
public int compareTo(Student o) {
return o.getAge() - this.age; // 降序排序
}
3. 对复杂对象数组排序
如果要对复杂对象数组排序,则需要借助于Comparator接口,该接口定义了一个compare方法,用于定义排序规则。与实现Comparable接口不同的是,实现Comparator接口的类是单独的类,而不是数组中的对象,需要将Comparator对象传递给sort方法。
示例代码如下:
class Student {
private String name;
private int age;
private float score;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
class ScoreComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return Float.compare(o2.getScore(), o1.getScore());
}
}
public class Main {
public static void main(String[] args) {
Student[] students = new Student[3];
students[0] = new Student();
students[0].setName("Tom");
students[0].setAge(18);
students[0].setScore(90.0f);
students[1] = new Student();
students[1].setName("Jerry");
students[1].setAge(20);
students[1].setScore(80.0f);
students[2] = new Student();
students[2].setName("Bob");
students[2].setAge(16);
students[2].setScore(85.0f);
Arrays.sort(students, new ScoreComparator());
System.out.println(Arrays.toString(students));
}
}
输出结果:
[Student{name='Tom', age=18, score=90.0}, Student{name='Bob', age=16, score=85.0}, Student{name='Jerry', age=20, score=80.0}]
可以看到,对象数组已经按照分数进行了降序排序。
4. 自定义排序方法
有时候我们需要对数组中的对象按照多个属性进行排序,此时可以采用自定义排序方法。自定义排序方法需要通过Comparator接口实现compare方法来定义排序规则。例如,对Student对象按照姓名和年龄进行排序:
class NameAndAgeComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
int result = o1.getName().compareTo(o2.getName());
if (result == 0) {
result = Integer.compare(o1.getAge(), o2.getAge());
}
return result;
}
}
其中,首先按照姓名进行比较,如果相同则按照年龄进行比较。
示例代码如下:
public class Main {
public static void main(String[] args) {
Student[] students = new Student[3];
students[0] = new Student();
students[0].setName("Bob");
students[0].setAge(16);
students[1] = new Student();
students[1].setName("Jerry");
students[1].setAge(20);
students[2] = new Student();
students[2].setName("Tom");
students[2].setAge(18);
Arrays.sort(students, new NameAndAgeComparator());
System.out.println(Arrays.toString(students));
}
}
输出结果:
[Student{name='Bob', age=16}, Student{name='Jerry', age=20}, Student{name='Tom', age=18}]
可以看到,对象数组已经按照姓名和年龄进行了排序。
综上所述,Java中的sort方法可以对基本数据类型和对象进行排序,还可以通过实现Comparable或Comparator接口来自定义排序方法。使用sort方法可以方便地对数组进行排序,提高程序的运行效率。
