Comparable故名思意是比较,意思就是做比较的,然后进行排序。
1.什么是comparable接口
此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1 和 e2 来说,当且仅当(e1.compareTo((Object)e2) == 0) 与e1.equals((Object)e2) 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致 。
2.上代码自己看
1 public class Student implements Comparable<Student>{ 2 3 4 private int no; 5 6 private String name; 7 8 public int getNo() { 9 return no; 10 } 11 12 public void setNo(int no) { 13 this.no = no; 14 } 15 16 public String getName() { 17 return name; 18 } 19 20 public void setName(String name) { 21 this.name = name; 22 } 23 24 @Override 25 public int compareTo(Student s) { 26 if(no>s.getNo()){//你需要进行比较的业务代码 27 return 1; 28 } 29 return -1; 30 } 31 32 }
public static void main(String[] args) { Student a=new Student(); a.setNo(4); a.setName("张山1"); Student a1=new Student(); a1.setNo(2); a1.setName("张山2"); List<Student> list=new ArrayList<>(); list.add(a); list.add(a1); Collections.sort(list); list.stream().forEach(s->{ System.out.println(s.getNo()+s.getName()); }); }
运行结果:张山2排前,也就是我们想要的结果.
3.Comaprator接口与comparable接口类似
同效果例子如下:
1 public class Student { 2 3 4 private int no; 5 6 private String name; 7 8 public int getNo() { 9 return no; 10 } 11 12 public void setNo(int no) { 13 this.no = no; 14 } 15 16 public String getName() { 17 return name; 18 } 19 20 public void setName(String name) { 21 this.name = name; 22 } 23 24 25 }
1 public class StudentCompare implements Comparator<Student>{ 2 3 @Override 4 public int compare(Student o1, Student o2) {//这里跟compareTo方法不同之处就是传了两个参数 5 if(o1.getNo()>o2.getNo()){ 6 return 1; 7 } 8 return -1; 9 } 10 11 }
1 public static void main(String[] args) { 2 Student a=new Student(); 3 a.setNo(4); 4 a.setName("张山1"); 5 6 Student a1=new Student(); 7 a1.setNo(2); 8 a1.setName("张山2"); 9 10 List<Student> list=new ArrayList<>(); 11 list.add(a); 12 list.add(a1); 13 14 Collections.sort(list,new StudentCompare()); 15 16 list.stream().forEach(s->{ 17 18 System.out.println(s.getNo()+s.getName()); 19 }); 20 }
最后运行结果跟第一个运行结果一样....
java比较器Comparable接口和Comaprator接口运用场景就是对数据库查询出来一些特殊需要的展现数据进行排序功能。
对数组,集合数据排序等...一切都是为操作数据而已.....