为什么在可比较的实现中的CompareTo中使用`this`?

戈文达·萨哈雷(Govinda Sakhare)

我是Java的新手,还是Collection框架的新手。我知道这this是指当前对象

public class Student implements Comparable <Student> {

    String name;
    int grade;

    public Student(String name, int grade) {
        this.name = name;
        this.grade = grade;
    }
    public int compareTo(Student s) {
         return this.name.compareTo(s.name);
    }
    public String toString() {
        return this.name + ", " + this.grade;
    }
}

this.name是null,并且s.name确实有一个值,因此我们通过比较来尝试做些什么this.name.compareTo(s.name);

当我们这样做时,真正发生了什么Collections.sort(studentList);

该代码段仅用于演示目的

戈登·阿洛克曼

您在问两个不同的问题,所以我将分别回答

第一个是我们通过比较this.name.compareTo(s.name)来尝试的结果;

当在Student类的对象上调用compareTo方法时,将成为调用对象。由于调用对象(希望已正确初始化),因此此.name将是调用对象的名称。

s.name是传递给compareTo方法的Student对象的名称,该对象再次(希望)正确地初始化并具有名称。

归结为一个调用compareTo的String变量,传入一个String变量进行比较

其次是当我们执行Collections.sort(studentList);时实际发生的事情;

这是Collections.Sort方法上的JavaDocs,但是您可能会问它与Comparable的实现有关。简而言之,在进行排序比较时,它使用了compareTo方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不在Scala中设置方法强制使用可比较类型?

在Java中11的CharSequence接口添加方法`compare`。为什么不`可比接口compareTo`?

为什么LOCALDATE的不实现可比<LOCALDATE的>?

Java Integer compareTo()-为什么要使用比较与减法?

创建一个对实现可比较的泛型类的compareTo

为什么在WPF中可比较的视图框中将字母缩放到不同大小?

为什么我需要可比较的接口而不是在 java 中创建我的自定义方法

为什么HashMap使用TreeNode作为不可比较的键?

如何使用compareTo()实现比较器

cryptozombies为什么在比较中使用keccak

添加可比较的接口并添加compareTo()方法

扩展可比较的接口并覆盖compareTo

如何在此TreeMap中实现均等和可比较

为什么java.util.UUID是可比较的?

为什么可比协议没有默认的Equatable实现?

为什么Java类应实现可比性?

为什么Java中的字符串比较(CompareTo)比C#中的更快?

为什么我们在 HashMap 和 HashSet 中使用 equals() 方法而不实现比较器接口?

使用非可比较类创建TreeSet:为什么运行时异常而不是编译时错误?

我为什么不能使用.compareTo(AA比较节点的BST为0键时)?

当使用.compareTo比较日期,为什么没有需要几个月的时间考虑在内?

为什么compareTo使用比较器在用户分开时不执行NPE引发NPE

当您可以在类中定义compareTo方法时,为什么要实现Comparable接口?

为什么在实现Comparator接口的数据时,编译器会抱怨带有不可比较元素的排序集合的构造?

使用可比/可比较方法从输入文件中对Arrraylist进行排序

实现可比较接口的类型的 LinkedList

为什么在Java float比较中使用Float.floatToIntBits()?

使用比较方法的可比接口

为什么我们投可比在TreeMap中