Java compareTo是否有某种发射前延迟?

Java compareTo是否有某种发射前延迟?,java,collections,comparable,compareto,Java,Collections,Comparable,Compareto,我刚刚发现这样一句话:首先比较最可能不同的项目,可以大大提高compareTo的性能。这是真的吗?如果是,为什么 这是真的吗?如果是,为什么 嗯,从字面上说,不是。无论历史如何,compareTo方法都需要同样长的时间来执行 它是否可以在特定实现中获得任何总体性能?是的,当然。但是为了能够回答你的问题,我们需要更多关于情况的背景。是的,这是真的 因为如果您将最有选择性的比较放在第一位,那么每次比较平均执行的代码会更少。但是由于这些测试通常非常快,只有在比较多个对象时,例如在对一个大集合进行排序时

我刚刚发现这样一句话:首先比较最可能不同的项目,可以大大提高compareTo的性能。这是真的吗?如果是,为什么

这是真的吗?如果是,为什么

嗯,从字面上说,不是。无论历史如何,compareTo方法都需要同样长的时间来执行

它是否可以在特定实现中获得任何总体性能?是的,当然。但是为了能够回答你的问题,我们需要更多关于情况的背景。

是的,这是真的


因为如果您将最有选择性的比较放在第一位,那么每次比较平均执行的代码会更少。但是由于这些测试通常非常快,只有在比较多个对象时,例如在对一个大集合进行排序时,速度的提高才会显著。

考虑一个具有多个属性的类。要比较实例,需要比较它们的一些属性。如果除一个属性外的所有属性都相等,则需要进行的比较量取决于属性比较的顺序:如果碰巧先比较不同的属性,则通过一次比较得到结果。但是如果你最后比较不同的属性,你必须做n次比较才能得到相同的结果


正如@Kdeveloper所指出的,除非您成批进行大量类似的比较,否则性能差异可能不会明显。但另一个好处是IMHO逻辑顺序:这使您考虑类属性之间的逻辑关系。总的来说,由于这是一种无中断优化,也就是说,它不会使代码更难阅读和维护,因此我认为大部分时间都值得这么做。

是从哪里来的?你在哪里找到的?我猜这是在讨论排序的背景下。嗯,是的,我知道,我只是想知道这是真的,因为我没有发现任何其他提到这件事。这很简单,因为它是非常简单的观察,如果你比较9个属性,所有返回0,但第10个产生一个结果,您有10个compareTo调用,它们的速度不是很快,如果您先比较第10个,您将赢得一个compareTo。如果您只比较一个属性,则为True。看看Péter Török的答案,我认为这句话可能不是关于要比较的对象,而是关于属性。起初,我认为对象比较的顺序很重要,但如果这就是你所说的,那么它是有意义的。但是,如果你需要在其他一些属性/字段上调用compareTo,那么这些测试通常非常快,特别是当它是一个具有多个>2个调用目标的接口时。尽管如此,这通常只有在您经常这样做时才明显,例如对集合进行排序。