可以利用Collections工具类中的sort方法,可以对数字、字母、对象进行排序。
- 通过Comparable接口进行排序:
(1)普通数字、字母排序(Integer、String类均已经实现了compareTo()方法):
Integer类源码:
public final class Integer extends Number implements Comparable<Integer> {
······
}
String类源码:
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
······
}
排序:
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(8);
list.add(9);
list.add(1);
list.add(3);
list.add(6);
Collections.sort(list); //排序
System.out.println(list);
Collections.reverse(list); //反转
System.out.println(list);
}
运行结果:
[1, 3, 6, 8, 9]
[9, 8, 6, 3, 1]
(2)对对象进行排序:
实现Comparable接口,再重写compareTo()方法,其返回值为0,表示相等;返回值为正数,表示大于;返回值为负数,表示小于。
Student.java:
public class Student implements Comparable<Student> {
······
@Override
public int compareTo(Student stu) {
int i = this.getGrade() - stu.getGrade();//按成绩排序
if(i == 0){
return this.age - stu.getAge();//若成绩相等,则用年龄排序
}
return i;
}
}
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student(75,12));
list.add(new Student(89,33));
list.add(new Student(63,29));
list.add(new Student(87,30));
list.add(new Student(89,23));
Collections.sort(list);
for (Student student : list) {
System.out.println(student.getGrade() + "," + student.getAge());
}
}
- 通过Comparator接口:
新建一个实现了Comparator接口的类,并重写抽象方法compare(Student o1, Student o2)。
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
list.add(new Student(75,12));
list.add(new Student(89,33));
list.add(new Student(63,29));
list.add(new Student(87,30));
list.add(new Student(89,23));
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int i = o1.getGrade() - o2.getGrade();//按成绩排序
if(i == 0){
return o1.age - o2.getAge();//若成绩相等,则用年龄排序
}
return i;
}
});
for (Student student : list) {
System.out.println(student.getGrade() + "," + student.getAge());
}
}