通过两个例子实现对象的自定义排序
1、实现Comparator接口。
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Comparator; 4 import java.util.List; 5 6 public class StudentComparator implements Comparator<Object> 7 { 8 @Override 9 public int compare(Object arg0, Object arg1) 10 { 11 return ((Student)arg0).getId() - ((Student)arg1).getId(); 12 } 13 14 public static void main(String[] args) 15 { 16 Student stu1 = new Student(11, "A"); 17 Student stu2 = new Student(33, "B"); 18 Student stu3 = new Student(22, "C"); 19 Student stu4 = new Student(55, "D"); 20 List<Student> stuList = new ArrayList<Student>(4); 21 stuList.add(stu1); 22 stuList.add(stu2); 23 stuList.add(stu3); 24 stuList.add(stu4); 25 Collections.sort(stuList, new StudentComparator()); 26 System.out.println(stuList); 27 } 28 } 29 30 class Student 31 { 32 private int id; 33 34 private String name; 35 36 public Student(int id, String name) 37 { 38 this.id = id; 39 this.name = name; 40 } 41 42 public int getId() 43 { 44 return id; 45 } 46 47 public void setId(int id) 48 { 49 this.id = id; 50 } 51 52 public String getName() 53 { 54 return name; 55 } 56 57 public void setName(String name) 58 { 59 this.name = name; 60 } 61 62 public String toString() 63 { 64 return this.getId() + this.getName(); 65 } 66 }
输出:[11A, 22C, 33B, 55D]
2、在需要排序的类上直接实现Comparable接口
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.List; 4 5 public class Student implements Comparable<Object> 6 { 7 private int id; 8 9 private String name; 10 11 public Student(int id, String name) 12 { 13 this.id = id; 14 this.name = name; 15 } 16 17 public int getId() 18 { 19 return id; 20 } 21 22 public void setId(int id) 23 { 24 this.id = id; 25 } 26 27 public String getName() 28 { 29 return name; 30 } 31 32 public void setName(String name) 33 { 34 this.name = name; 35 } 36 37 public String toString() 38 { 39 return this.getId() + this.getName(); 40 } 41 42 @Override 43 public int compareTo(Object o) 44 { 45 return this.getId() - ((Student)o).getId(); 46 } 47 48 public static void main(String[] args) 49 { 50 Student stu1 = new Student(11, "A"); 51 Student stu2 = new Student(33, "B"); 52 Student stu3 = new Student(22, "C"); 53 Student stu4 = new Student(55, "D"); 54 List<Student> stuList = new ArrayList<Student>(4); 55 stuList.add(stu1); 56 stuList.add(stu2); 57 stuList.add(stu3); 58 stuList.add(stu4); 59 Collections.sort(stuList); 60 System.out.println(stuList); 61 } 62 63 }
同样输出:[11A, 22C, 33B, 55D]
3、一个类实现了Comparable接口则表明这个类自身对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离。Comparator也可以在下面两种环境下使用:
(1)类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身。
(2)可以使用多种排序标准,比如定义升序类、降序类等。