1.运用Collections.sort()方法(只包含Integer类型的单属性类型):
public class Text {
public static void main(String[] args) {
List<Integer> res = new ArrayList<Integer>();
res.add(2);
res.add(4);
res.add(3);
res.add(0);
System.out.println(res);
Collections.sort(res);
System.out.println(res);
}
}
本质上Integer类系统已经实现了Comparable接口
2. 实现Comparable接口(适合对象包含多个属性的集合排序):
package core.java.collection.collections;
public class Student implements Comparable<Student>{
private int score;
private int age;
public Student(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<Student> stus = new ArrayList<Student>();
stus.add(new Student(15, 80));
stus.add(new Student(14, 87));
stus.add(new Student(14, 67));
stus.add(new Student(13, 100));
Collections.sort(stus);
for(Student stu : stus){
System.out.println(stu.getScore() + "," + stu.getAge());
}
}
注意:实现compareTo()方法,该方法的返回值0代表相等,1表示大于,-1表示小于;
3.实现Comparator的匿名内部类(也是适合对象包含多个属性的集合排序)
package core.java.collection.collections;
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>();
students.add(new Students(15, 98));
students.add(new Students(14, 98));
students.add(new Students(14, 99));
students.add(new Students(13, 95));
students.add(new Students(16, 89));
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());
}
}
Comparable和Comparator区别比较
Comparable类似“内部比较”,而Comparator类似“外部比较”。
Comparable:是一个带有排序功能的接口,如果某个类实现了Comparable接口,就意味着“该类支持排序”。
Comparator:是比较器,如果需要控制某个类的次序,就可以建立个“该类的比较器”来进行排序。
两种方法各有优劣:
Comparable比较 简单, 只需实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码;
用Comparator 的优点是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 且在Comparator 里面就可以实现复杂的可以通用的比较,使其能够匹配一些简单的对象,就可以节省很多重复。