集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A、B、C,则取得时候,则也是A、B、C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看下面小例子:
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Comparator; 4 import java.util.List; 5 6 public class Test { 8 public static void main(String[] args) { 10 List<Student> list = new ArrayList<Student>(); 11 12 //创建3个学生对象,年龄分别是20、19、21,并将他们依次放入List中 13 Student s1 = new Student(); 14 s1.setAge(20); 15 Student s2 = new Student(); 16 s2.setAge(19); 17 Student s3 = new Student(); 18 s3.setAge(21); 19 list.add(s1); 20 list.add(s2); 21 list.add(s3); 23 System.out.println("排序前:"+list); 24 25 Collections.sort(list, new Comparator<Student>(){ 27 /* 28 * int compare(Student o1, Student o2) 返回一个基本类型的整型, 29 * 返回负数表示:o1 小于o2, 30 * 返回0 表示:o1和o2相等, 31 * 返回正数表示:o1大于o2。 32 */ 33 public int compare(Student o1, Student o2) { 34 35 //按照学生的年龄进行升序排列 36 if(o1.getAge() > o2.getAge()){ 37 return 1; 38 } 39 if(o1.getAge() == o2.getAge()){ 40 return 0; 41 } 42 return -1; 43 } 44 }); 45 System.out.println("排序后:"+list); 46 } 47 } 48 class Student{ 49 private int age; 50 public int getAge() { 51 return age; 52 } 53 public void setAge(int age) { 54 this.age = age; 55 } 56 @Override 57 public String toString() { 58 return getAge()+""; 59 } 60 }
执行结果:
排序前:[20, 19, 21] 排序后:[19, 20, 21]
当然对象的属性可以多个,比如按年龄升序,按成绩降序等.