在 Java 中,排序是一个常见的操作,Java 提供了多种排序方法,主要包括 Arrays.sort()
和 Collections.sort()
。同时,Java 还提供了 Comparable
和 Comparator
接口来定制对象的排序规则。以下将详细介绍这些方法及接口的使用。
1. Arrays.sort()
Arrays.sort()
方法用于对数组进行排序,支持基本数据类型和对象数组。
示例代码:
import java.util.Arrays;
public class ArraySortExample {
public static void main(String[] args) {
// 对基本数据类型数组进行排序
int[] intArray = {5, 3, 8, 1, 2};
Arrays.sort(intArray);
System.out.println("Sorted int array: " + Arrays.toString(intArray));
// 对对象数组进行排序
String[] strArray = {"Banana", "Apple", "Cherry"};
Arrays.sort(strArray);
System.out.println("Sorted string array: " + Arrays.toString(strArray));
}
}
2. Collections.sort()
Collections.sort()
方法用于对 List
集合进行排序。
示例代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionSortExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Banana");
list.add("Apple");
list.add("Cherry");
// 对 List 进行排序
Collections.sort(list);
System.out.println("Sorted list: " + list);
}
}
3. Comparable 接口
Comparable
接口用于定义对象的自然排序。实现此接口的类需要重写 compareTo()
方法。
示例代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Person implements Comparable<Person> {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age); // 按年龄升序排序
}
@Override
public String toString() {
return name + ": " + age;
}
}
public class ComparableExample {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));
people.add(new Person("Charlie", 35));
Collections.sort(people);
System.out.println("Sorted by age: " + people);
}
}
4. Comparator 接口
Comparator
接口用于定义不同的排序规则。实现此接口的类需要重写 compare()
方法。
示例代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ": " + age;
}
}
public class ComparatorExample {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));
people.add(new Person("Charlie", 35));
// 使用 Comparator 按名称排序
Collections.sort(people, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p1.name.compareTo(p2.name); // 按名称升序排序
}
});
System.out.println("Sorted by name: " + people);
}
}
5. Lambda 表达式 (Java 8 及以上)
在 Java 8 及以上版本中,可以使用 Lambda 表达式简化 Comparator
的实现。
示例代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class LambdaComparatorExample {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));
people.add(new Person("Charlie", 35));
// 使用 Lambda 表达式按年龄排序
Collections.sort(people, (p1, p2) -> Integer.compare(p1.age, p2.age));
System.out.println("Sorted by age (using lambda): " + people);
}
}
总结
- 使用
Arrays.sort()
可以对数组进行排序,支持基本数据类型和对象。 - 使用
Collections.sort()
可以对List
进行排序。 - 实现
Comparable
接口可以定义对象的自然排序。 - 实现
Comparator
接口可以定义自定义排序规则。 - Java 8 引入了 Lambda 表达式,使得
Comparator
的使用更加简洁。
通过上述示例,可以掌握 Java 中排序的基本用法与实现方式。