# Java List集合排序实现方法解析

1.使用 Collections 工具类中的 sort() 方法

void sort(List list) 在自定义类User里面实现Comparable<User>接口，并重写抽象方法compareTo(Student o);

void sort(List list, Comparator c) 第二个参数为了省事，可以直接使用匿名内部类

public class User implements Comparable<User>{

private int score;

private int age;

public User(int score, int age){
super();
this.score = score;
this.age = age;
}

public int getScore() {
return score;
}

public void setScore(int score) {
this.score = score;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public int compareTo(User o) {
int i = this.getAge() - o.getAge();//先按照年龄排序
if(i == 0){
return this.score - o.getScore();//如果年龄相等了再用分数进行排序
}
return i;
}

}

public static void main(String[] args) {
List<User> users = new ArrayList<User>();
Collections.sort(users);
for(User user : users){
System.out.println(user.getScore() + "," + user.getAge());
}
}
public class Students {

private int age;
private int score;

public Students(int age, int score){
super();
this.age = age;
this.score = score;
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
public static void main(String[] args) {
List<Students> students = new ArrayList<Students>();
Collections.sort(students, new Comparator<Students>() {

@Override
public int compare(Students o1, Students o2) {
int i = o1.getScore() - o2.getScore();
if(i == 0){
return o1.getAge() - o2.getAge();
}
return i;
}
});
for(Students stu : students){
System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
}
}

2.直接使用list.sort()方法，传入实现Comparator接口的实现类的实例，为了省事直接传入匿名内部类

public class Students {

private int age;
private int score;

public Students(int age, int score){
this.age = age;
this.score = score;
}

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
public static void main(String[] args) {
List<Students> students = new ArrayList<Students>();

students.sort(new Comparator<Students>() {
[email protected]
public int compare(Students o1, Students o2) {
int i = o1.getScore() - o2.getScore();
if (i == 0) {
return o1.getAge() - o2.getAge();
}
return i;
}
});

for (Students stu : students) {
System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
}
}