当前位置: 首页 > 知识库问答 >
问题:

为什么Java“可比”比只使用compareTo方法更好?

龚沛
2023-03-14

>

  • 我看到可比接口只允许实现compareTo方法。那么为什么我们甚至需要这个接口呢?为什么我们不能简单地在我们想要的任何类中定义和声明该方法,而无需实现可比接口?

    我知道这是正确的:SortedSet


  • 共有2个答案

    孟均
    2023-03-14

    为什么我们不能在我们想要的任何类中简单地定义和声明方法,而不必实现可比较的接口?

    有些集合(如TreeMap)需要比较两个对象,即使是简单的add()操作。这样的树需要在内部将“较小”对象放在左树中,将“较大”对象放在右子树中(稍微简化)
    因为这样的通用集合(如TreeMap)设计用于所有对象,所以对象必须知道如何从compareTo()执行

    其他集合(如HashMaps)不需要对象实现Compariable(它们使用hashcode)

    岑彬炳
    2023-03-14

    为什么我们不能在我们想要的任何类中简单地定义和声明方法,而不必实现可比较的接口?

    在这种情况下,您希望排序方法如何工作?

    能够对元素都可以相互比较的任何集合进行排序真的很方便——界面就是表达这一点的方式。

    是否正确:<代码>可比较

    不,除非Date本身是通用的。你可以写:

    Comparable<Date> example = new Date();
    

    ...但这样做会很奇怪。通常可比较由想要比较现有对象的代码使用——例如,它会从集合中获取值并相互比较。

     类似资料:
    • 问题内容: 我发现该方法的实现如下所示: 问题是为什么使用比较而不是减法: 问题答案: 这是由于整数溢出。当非常大且为负数时,则从前者中减去后者会产生大于可能溢出至负数范围的结果。

    • 问题内容: 我已经开始学习线程同步。 同步方法: 同步块: 什么时候应该使用方法和块? 为什么块比方法更好? 问题答案: 这不是更好的问题,只是有所不同。 同步方法时,实际上是在与对象本身进行同步。对于静态方法,您正在同步到对象的类。因此,以下两段代码以相同的方式执行: 就像您写的一样。 如果要控制到特定对象的同步,或者只想将方法的 一部分 同步到该对象,则指定一个块。如果在方法声明上使用关键字,

    • 问题内容: 我试图理解 为什么Java的ArrayDeque比Java的LinkedList更好, 因为它们都实现了Deque接口。 我几乎看不到有人在他们的代码中使用ArrayDeque。如果有人对ArrayDeque的实现方式有了更多的了解,那将是有帮助的。 如果我理解它,我会更自信地使用它。对于JDK实现管理头和尾引用的方式,我不清楚。 问题答案: 链接结构可能是最糟糕的结构,要在每个元素上

    • 问题内容: 我目前正在开始新的应用开发。应用程序设计师坚持认为我们使用 JBoss5 是因为它“更好”。是否有人对“更好”有更广泛的定义(如果如此)? 我有在具有大量用户负载的大规模应用程序中使用 Tomcat5 和6的经验,并且它处理得很好(IMHO)。两者都将在相同的硬件条件下(如果实现很重要)在 RedHat6 上运行。 提前致谢 问题答案: 说任何工具或框架都只是“更好”是可笑的。它总是取

    • 我在添加上面提到的两个方面有点麻烦。我有两节课。员工和公司。 employee类保存一些关于雇员的信息,实例变量包括他们的名字、日期、numOfSales等,还有一些方法,如setName、getName等。 然后需要编写一个compareTo()方法,我把它放在employee类中?这将允许员工按其numOfSales实例变量存储的值的升序进行排序。

    • 问题内容: 我在自学Java线程时,发现有些令我困惑的地方。我做了一个叫做实现的课程。run方法仅打印“ Hello World”,休眠一秒钟,然后重复。 在我的主要方法中,我有: 如我所料,我看到了“ Hello World”和“ Done”。快速打印,这意味着main方法已到达末尾,但是我没想到的是,即使到达main末尾后,我开始运行的线程仍保持运行。 为什么即使退出主程序后程序仍继续执行?我