Collections.sort()
是Java集合框架中用于对List集合进行排序的重要方法。下面我将详细介绍它的使用方法,包括基本排序和自定义排序。
基本用法
1. 对基本类型列表排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BasicSortExample {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(1);
numbers.add(3);
System.out.println("排序前: " + numbers); // [5, 2, 8, 1, 3]
// 使用Collections.sort()进行升序排序
Collections.sort(numbers);
System.out.println("排序后: " + numbers); // [1, 2, 3, 5, 8]
}
}
2. 对字符串列表排序
List<String> names = new ArrayList<>();
names.add("张三");
names.add("李四");
names.add("王五");
names.add("赵六");
System.out.println("排序前: " + names); // [张三, 李四, 王五, 赵六]
Collections.sort(names);
System.out.println("排序后: " + names); // [李四, 王五, 张三, 赵六] (按拼音字母顺序)
自定义排序
1. 使用Comparator接口
// 按字符串长度排序
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length(); // 升序
// return s2.length() - s1.length(); // 降序
}
});
// Java 8 Lambda表达式简化写法
Collections.sort(names, (s1, s2) -> s1.length() - s2.length());
2. 对自定义对象排序
class Student {
String name;
int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public String toString() {
return name + ":" + score;
}
}
public class CustomSortExample {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("张三", 85));
students.add(new Student("李四", 92));
students.add(new Student("王五", 78));
// 按分数降序排序
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s2.score - s1.score; // 降序
}
});
// Lambda表达式写法
Collections.sort(students, (s1, s2) -> s2.score - s1.score);
System.out.println(students); // [李四:92, 张三:85, 王五:78]
}
}
Java 8+ 的新特性
1. 使用Comparator的静态方法
// 按姓名排序
Collections.sort(students, Comparator.comparing(s -> s.name));
// 按分数降序
Collections.sort(students, Comparator.comparingInt(Student::getScore).reversed());
2. 使用List接口的sort()方法
// 等价于Collections.sort()
students.sort(Comparator.comparingInt(Student::getScore));
注意事项
-
Collections.sort()
只能对List进行排序,不能用于Set或Map -
排序是稳定的(相等元素的相对位置不变)
-
对于基本数据类型包装类(Integer, String等)已经实现了Comparable接口
-
自定义类要实现排序,要么实现Comparable接口,要么提供Comparator