当前位置: 首页 > 面试题库 >

如何编写比较对象的compareTo方法?

百里锋
2023-03-14
问题内容

我正在学习数组,基本上我有一个可以收集姓氏,名字和分数的数组。

我需要编写一个compareTo将姓氏与名字进行比较的方法,以便可以按姓氏开头的字母顺序对列表进行排序,然后,如果两个人的姓氏相同,则将对姓氏进行排序。

我很困惑,因为我书中的所有信息都是在比较数字,而不是对象和字符串。

到目前为止,这是我编写的代码。我知道这是错误的,但至少可以解释我在做什么:

public int compare(Object obj) // creating a method to compare 
{   
    Student s = (Student) obj; // creating a student object

    // I guess here I'm telling it to compare the last names?
    int studentCompare = this.lastName.compareTo(s.getLastName());

    if (studentCompare != 0)
        return studentCompare;
    else 
    {
        if (this.getLastName() < s.getLastName())
            return - 1;

        if (this.getLastName() > s.getLastName())
            return 1;
    }
    return 0;
}

我知道<>符号是错误的,但是就像我说的那样,我的书仅向您展示如何使用compareTo


问题答案:

这是比较字符串的正确方法:

int studentCompare = this.lastName.compareTo(s.getLastName());

这甚至不会编译:

if (this.getLastName() < s.getLastName())

使用 if (this.getLastName().compareTo(s.getLastName()) < 0)代替。

因此,要比较拳头/姓氏顺序,您需要:

int d = getFirstName().compareTo(s.getFirstName());
if (d == 0)
    d = getLastName().compareTo(s.getLastName());
return d;


 类似资料:
  • 问题内容: 例如,如果我要比较字符串“ Hello”和“ World”。 怎么知道Hello大于World? 我唯一能想到的是,也许它使用ASCII表作为参考? 谢谢您的帮助! 问题答案: 它按 字典顺序 比较两个字符串。在String API中 检查此处。 如果两个字符串不同,那么它们要么在某个索引处具有不同的字符(这是两个字符串的有效索引),要么它们的长度不同,或者两者都不同。如果它们在一个或

  • 我不知道如果没有其他变量告诉我哪个更大,我怎么能比较两个可比较的对象。问题是:创建一个名为Max的类,该类提供一个名为Max的类方法。Max将两个参数用于可以比较的对象,即实现如上所示的Java Compariable接口的对象。它返回对较大值的引用。如果两个对象相等,则应返回第一个对象。实现的可比性取决于每个类,您的方法将在多个不同类型的对象上调用。 它在接口中提供了int compareTo(

  • 我希望有一个更具体的可比接口,以便我可以更好地键入返回参数。该界面目前如下所示: 现在,当我尝试对这些更具体的可比值列表进行排序时,如下所示,我收到一个错误,因为b的类型是“RankComparable”而不是类型“T”。 为了解决这个问题,我可以实现如下所示的Self方法。这将解决我的问题,但它看起来非常丑陋。如果有人能找到解决这个问题的更好的办法,我会很高兴。

  • 如果我有一个由T对象组成的PriorityQueue,并且T有一个compareTo()方法并实现comparable,但是我的PriorityQueue也使用一个comparator作为参数,那么我的PriorityQueue在元素的顺序方面会寻找什么? 换句话说,哪一个决定了对象的优先级?compareTo()方法或提供的比较器?

  • 本文向大家介绍js对象如何深比较?相关面试题,主要包含被问及js对象如何深比较?时的应答技巧和注意事项,需要的朋友参考一下 之前其实没听说过,但是刚刚搜索到了 我还是不复制粘贴了 原文地址

  • 此外,我重写了hashCode()以: 现在,即使两个对象都是@dog0,print语句也会打印false。想知道为什么控制台: