Comparable故名思意是比较,意思就是做比较的,然后进行排序。

1.什么是comparable接口

此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 的每一个 e1 和 e2 来说,当且仅当(e1.compareTo((Object)e2) == 0) e1.equals((Object)e2) 具有相同的布尔值时,类 的自然排序才叫做与 equals 一致 。

2.上代码自己看

  1. public class Student implements Comparable<Student>{
  2.  
  3. private int no;
  4.  
  5. private String name;
  6.  
  7. public int getNo() {
  8. return no;
  9. }
  10.  
  11. public void setNo(int no) {
  12. this.no = no;
  13. }
  14.  
  15. public String getName() {
  16. return name;
  17. }
  18.  
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22.  
  23. @Override
  24. public int compareTo(Student s) {
  25. if(no>s.getNo()){//你需要进行比较的业务代码
  26. return 1;
  27. }
  28. return -1;
  29. }
  30.  
  31. }
  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);
  15.  
  16. list.stream().forEach(s->{
  17.  
  18. System.out.println(s.getNo()+s.getName());
  19. });
  20. }

运行结果:张山2排前,也就是我们想要的结果.

3.Comaprator接口与comparable接口类似

同效果例子如下:

  1. public class Student {
  2.  
  3. private int no;
  4.  
  5. private String name;
  6.  
  7. public int getNo() {
  8. return no;
  9. }
  10.  
  11. public void setNo(int no) {
  12. this.no = no;
  13. }
  14.  
  15. public String getName() {
  16. return name;
  17. }
  18.  
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22.  
  23. }
  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接口运用场景就是对数据库查询出来一些特殊需要的展现数据进行排序功能。

对数组,集合数据排序等...一切都是为操作数据而已.....

java比较器Comparable接口和Comaprator接口的更多相关文章

  1. 小白养成记——Java比较器Comparable和Comparator

    一.使用情景 1.  调用Arrays.sort()方法或Collections.sort()方法对自定义类的对象排序 以Arrays.sort()为例.假定有如下自定义的Person类 1 publ ...

  2. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  3. java.lang.Comparable接口

    转自:http://blog.csdn.net/zccst/article/details/5092920 java.lang.Comparable 接口 作者: zccst java.lang.Co ...

  4. Java中实现对象的比较:Comparable接口和Comparator接口

    在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的.所以Java中 ...

  5. Java:实现对象的比较 comparable接口和comparator接口

    在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的.所以Java中 ...

  6. Java.lang.Comparable接口和Java.util.Comparator接口的区别

    Java的Comparator和Comparable当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. 1.Com ...

  7. java lang(Comparable接口) 和java util(Comparator接口)分析比较

    //Comparable 接口强行对实现它的每个类的对象进行整体排序. -- 自然排序.类的compareTo称为自然比较方法. public interface Comparable<T> ...

  8. Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

    Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...

  9. JAVA笔记19-容器之三 Set接口、List接口、Collections类、Comparable接口(重要)

    一.Set接口 //HashSet综合举例 import java.util.*; public class Test{ public static void main(String[] args){ ...

随机推荐

  1. C# 求斐波那契数列的前10个数字 :1 1 2 3 5 8 13 21 34 55

    //C# 求斐波那契数列的前10个数字 :1 1 2 3 5 8 13 21 34 55 using System; using System.Collections.Generic; using S ...

  2. c# winform动态生成控件与获取动态控件输入的值

    差不多有2年没有写winform程序,一直都是写bs.最近项目需要,又开始着手写一个小功能的winform程序,需要动态获取xml文件的节点个数,生成跟节点个数一样的textbox, 最后还要获取操作 ...

  3. 【JAVA】抽象类

    一.什么是抽象类 用abstract修饰的类就是抽象类.抽象类中可以有用abstract修饰的抽象方法,也可以没有抽象方法. 二.为什么要设计抽象类 在某些情况下,某个父类只是知道其子类应该包含怎样的 ...

  4. [转]JavaScript去重的6种方法

    Array.prototype.unique1 = function() { var n = []; for(var i = 0; i < this.length; i++) { if (n.i ...

  5. javascript学习笔记20160121-css选择器

    元素可以用id.标签名或类来描述: 更一般的,元素可以基于属性来选取: 这些基本的选择器可以组合使用: 选择器可以指定文档结构(重要,之前一直不太明白>的使用): 选择器可以组合起来选取多个或多 ...

  6. Cabarc Overview (Microsoft TechNet)

    Original Link:  Cabarc Overview Applies To: Windows Server 2003, Windows Server 2003 R2, Windows Ser ...

  7. 面试题(C#基础)

    1>构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading. 2>string[] ss=Enum.GetNames(typeof(C ...

  8. HTML meta viewport属性说明

    什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤 到很小的窗口中(这样会破坏没有针对手 ...

  9. 捕获ClientDataSet.ApplyUpdates和SocketConnection异常

    核心提示:如何捕获ClientDataSet.ApplyUpdates的错误,不用ReconcileError... var cdsEmp:TClientDataSet; //保存 procedure ...

  10. 【python】Windows安装Beautiful Soup

    环境:win10,python 3.5,Beautiful Soup 4.1   步骤1:设定python为系统环境变量,具体设置如下图,在文本后加上";C:\Python35;C:\Pyt ...