美文网首页
Java中的比较?

Java中的比较?

作者: 抄无止境 | 来源:发表于2019-11-04 17:35 被阅读0次

参考
Java基础之comparator和comparable的区别以及使用

1.== 和 equals的区别

2.Comparator和Comparable的区别?

Comparable 接口用于定义对象的自然顺序,而 comparator 通常用于定义用户定制的顺序。
Comparable 总是只有一个,但是可以有多个 comparator 来定义对象的顺序。
Comparable类需要实现此接口,定义在类内,不利于扩展
Comparator更灵活,可以随时自定义比较规则

class Student implements Comparable<Student>{  
    private String name;  
    private int age;  
    private float score;  
      
    public Student(String name, int age, float score) {  
        this.name = name;  
        this.age = age;  
        this.score = score;  
    }  
      
    public String toString()  
    {  
        return name+"\t\t"+age+"\t\t"+score;  
    }  
  //  返回正数,零,负数各代表大于,等于,小于。
    @Override  
    public int compareTo(Student o) {  
        // TODO Auto-generated method stub  
        if(this.score>o.score)//score是private的,为什么能够直接调用,这是因为在Student类内部  
            return -1;//由高到底排序  
        else if(this.score<o.score)  
            return 1;  
        else{  
            if(this.age>o.age)  
                return 1;//由底到高排序  
            else if(this.age<o.age)  
                return -1;  
            else  
                return 0;  
        }  
    }  
}  
  
public class ComparableDemo01 {  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        Student stu[]={new Student("zhangsan",20,90.0f),  
                new Student("lisi",22,90.0f),  
                new Student("wangwu",20,99.0f),  
                new Student("sunliu",22,100.0f)};  
        java.util.Arrays.sort(stu);  
        for(Student s:stu)  
        {  
            System.out.println(s);  
        }  
    }  
}

但是在设计类的时候,可能没有考虑到让类实现Comparable接口,那么就需要用到另外的一个比较器接口Comparator。

List<Student> stus = new ArrayList<Student>(){
            {
                add(new Student("张三", 30));    
                add(new Student("李四", 20));    
                add(new Student("王五", 60));    
            }
        };
        //对users按年龄进行排序
        Collections.sort(stus, new Comparator<Student>() {

            @Override
            public int compare(Student s1, Student s2) {
                // 升序
                //return s1.getAge()-s2.getAge();
                return s1.getAge().compareTo(s2.getAge());
                // 降序
                // return s2.getAge()-s1.getAge();
                // return s2.getAge().compareTo(s1.getAge());
            }
        });
        // 输出结果
        ...

还可以使用lambda表达式简化代码, 前提是JDK8开发环境, 如下:

List<Student> stus = new ArrayList<Student>(){
            {
                add(new Student("张三", 30));    
                add(new Student("李四", 20));    
                add(new Student("王五", 60));    
            }
        };
        //对users按年龄进行排序
        Collections.sort(stus, (s1,s2)->(s1.getAge()-s2.getAge()));

相关文章

  • Java中的比较?

    参考Java基础之comparator和comparable的区别以及使用 1.== 和 equals的区别 2....

  • Java中对象的比较

    Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性大小来确定它们之间的大小关系。...

  • java中的比较器

    java中的比较器 代码实现

  • Java中的对象比较

    一、对象的比较 在之前如果是两个数值的比较“==”,如果是字符串的比较一般用“equals()" 方法,这个方法是...

  • Java中的相等比较

    说一说java中的相等比较。 在日本做开发,遇到很多转职Java的小白,常常搞不懂Java中的相等的比较怎么用,所...

  • Java中equals()和==的比较

    Java中的equals()和==比较是个基础问题,之前在项目中也犯过错,简单对比一下。 Object类的equa...

  • JAVA中的中文顺序比较

    在Java中我们常用compareTo来比较两个对象的大小,如: 在比较的字符串是英文字符时,这种方法是正确的。但...

  • Java中的常用比较总结

    1. java中compareTo比较两个日期大小 对两个日期进行比较的时候,或者是日期的string进行比较的时...

  • Java中的比较及使用

    1、 == 用于基本数据类型的比较,返回值是布尔类型 boolean2、 equals() 返回值值是布尔类...

  • HashMap的简单解析

    在Java中HashMap算是比较常用的集合框架,是Java中比较典型的数据结构。在本文中主要探究HashMap中...

网友评论

      本文标题:Java中的比较?

      本文链接:https://www.haomeiwen.com/subject/qbidbctx.html