在 Java 中,Arrays.sort()
是一个非常实用的数组排序方法,它位于 java.util.Arrays
类中,提供了多种重载形式,可用于对不同类型的数组进行排序。以下是关于 Arrays.sort()
的详细运用方法:
1. 对基本数据类型数组进行升序排序
Arrays.sort()
可以对 int
、long
、float
、double
、char
等基本数据类型的数组进行升序排序。
示例代码
收起
java
import java.util.Arrays;
public class BasicSorting {
public static void main(String[] args) {
// 对 int 数组进行排序
int[] intArray = {5, 3, 8, 1, 2};
Arrays.sort(intArray);
System.out.println("排序后的 int 数组: " + Arrays.toString(intArray));
// 对 char 数组进行排序
char[] charArray = {'d', 'a', 'c', 'b'};
Arrays.sort(charArray);
System.out.println("排序后的 char 数组: " + Arrays.toString(charArray));
}
}
代码解释
Arrays.sort(intArray)
对int
类型的数组intArray
进行升序排序。Arrays.sort(charArray)
对char
类型的数组charArray
进行升序排序。
2. 对指定范围的数组进行排序
Arrays.sort()
还可以对数组的指定范围进行排序,使用形式为 Arrays.sort(arr, fromIndex, toIndex)
,其中 fromIndex
是起始索引(包含),toIndex
是结束索引(不包含)。
示例代码
收起
java
import java.util.Arrays;
public class RangeSorting {
public static void main(String[] args) {
int[] arr = {5, 3, 8, 1, 2};
// 对数组的索引 1 到 3(不包含 3)的元素进行排序
Arrays.sort(arr, 1, 3);
System.out.println("排序后的数组: " + Arrays.toString(arr));
}
}
代码解释
Arrays.sort(arr, 1, 3)
只对数组 arr
中索引从 1 到 2 的元素进行排序,索引 0 和 3 及以后的元素保持不变。
3. 对对象数组进行排序
当对对象数组进行排序时,数组中的元素必须实现 java.lang.Comparable
接口,并重写 compareTo()
方法,以定义对象之间的比较规则。
示例代码
收起
java
import java.util.Arrays;
// 定义一个实现 Comparable 接口的类
class Student implements Comparable<Student> {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public int compareTo(Student other) {
return Integer.compare(this.id, other.id);
}
@Override
public String toString() {
return "Student{id=" + id + ", name='" + name + "'}";
}
}
public class ObjectSorting {
public static void main(String[] args) {
Student[] students = {
new Student(3, "Alice"),
new Student(1, "Bob"),
new Student(2, "Charlie")
};
Arrays.sort(students);
System.out.println("排序后的学生数组: " + Arrays.toString(students));
}
}
代码解释
Student
类实现了Comparable<Student>
接口,并重写了compareTo()
方法,按照学生的id
进行比较。Arrays.sort(students)
对Student
类型的数组students
进行排序,排序规则由compareTo()
方法定义。
4. 使用自定义比较器进行排序
除了实现 Comparable
接口,还可以使用 java.util.Comparator
接口来定义自定义的比较规则。
示例代码
收起
java
import java.util.Arrays;
import java.util.Comparator;
class Person {
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{age=" + age + ", name='" + name + "'}";
}
}
public class CustomSorting {
public static void main(String[] args) {
Person[] persons = {
new Person(25, "Alice"),
new Person(20, "Bob"),
new Person(30, "Charlie")
};
// 使用自定义比较器按年龄降序排序
Arrays.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p2.getAge(), p1.getAge());
}
});
System.out.println("按年龄降序排序后的人员数组: " + Arrays.toString(persons));
}
}
代码解释
- 定义了一个
Person
类,包含age
和name
两个属性。 - 使用匿名内部类实现
Comparator<Person>
接口,并重写compare()
方法,定义按年龄降序排序的规则。 Arrays.sort(persons, comparator)
使用自定义的比较器对Person
类型的数组persons
进行排序。
5. 对包装类数组进行降序排序
对于包装类数组(如 Integer
、Double
等),可以使用 Collections.reverseOrder()
方法获取一个降序比较器。
示例代码
收起
java
import java.util.Arrays;
import java.util.Collections;
public class ReverseSorting {
public static void main(String[] args) {
Integer[] numbers = {5, 3, 8, 1, 2};
// 降序排序
Arrays.sort(numbers, Collections.reverseOrder());
System.out.println("降序排序后的数组: " + Arrays.toString(numbers));
}
}
代码解释
Arrays.sort(numbers, Collections.reverseOrder())
使用 Collections.reverseOrder()
提供的降序比较器对 Integer
类型的数组 numbers
进行降序排序。
以上就是 Arrays.sort()
方法的常见运用方式,根据不同的需求可以选择合适的排序方式。