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

什么时候存储比较的结果比重新计算比较的速度更有意义?

令狐弘益
2023-03-14

我想对什么时候(忽略可用内存空间)存储比较结果而不是重新计算比较结果是有意义的有一个坚实的理解。什么是证明存储所产生的时间成本的临界点?是2次、3次还是4次比较?更多?

例如,在这种特殊情况下,哪个选项(通常)在速度方面会表现得更好?

备选办法1:

int result = id.compareTo(node.id);

return result > 0 ? 1 : result < 0 ? -1 : 0;

备选案文2:

return id.compareTo(node.id) > 0 ? 1 : id.compareTo(node.id) < 0 ? -1 : 0;

我知道这没什么大不了的,大多数时候这种差异可以忽略不计。然而,我是一个完美主义者,我真的很想解决这个特殊的问题,这样我就可以继续我的生活了,哈哈。

此外,我认为对于我将来可能遇到的类似情况,这个答案很可能是有启发意义的,在这种情况下,差异很可能很大(例如,当比较或内存分配的成本无法产生,或者复杂到足以引起真正的性能问题)。

答案应该与Java编程相关,而不是其他语言,请。

我知道我已经提到过几次了,但是请把答案集中在速度差异上!我很清楚在编写代码时可以而且应该考虑许多其他因素,但这里我只想要一个更快的直截了当的参数。

共有1个答案

艾奕
2023-03-14

经验告诉我,选项1应该更快,因为您只对compare方法进行一次调用,并存储结果以供重用。支持这一信念的事实是,局部变量存在于堆栈中,进行方法调用涉及到堆栈中的更多工作,而不仅仅是将一个值推到堆栈上。然而,分析是比较两个实现的最佳和最安全的方法。

首先要认识到的是,java编译器和JVM可以一起优化代码,使其能够最有效地完成工作(只要遵循某些规则)。有可能在性能上没有区别,也有可能实际执行的并不是你想象的那样。然而,一个真正重要的区别是在调试中:如果在存储变量版本的return语句上放置一个断点,则可以看到调用返回的内容,否则在调试器中看不到。更方便的是,当您似乎无用地将从方法返回的值存储在变量中,然后返回它,这样您就可以在调试时看到从方法返回的内容,否则就无法看到它。

 类似资料:
  • 问题内容: 它们看起来几乎一样,甚至是语法? 使用什么?或什么时候使用什么? 问题答案: 速度不再是真正活跃的开发。Freemarker是。 根据我的经验,Freemarker也更加灵活。

  • 问题内容: 题: 我需要比较2次-当前时间和设定时间。如果设定的时间是将来的时间,请找出剩余的分钟数,直到所说的未来时间为止。 其他资讯: 我目前正在使用 我从关于SO的另一个答案中窃取了有关如何以Int格式获取当前时间的信息。然后,我将未来时间分为小时(Int)和分钟(Int)并进行比较…但是,当您越过小时障碍时,这变得很奇怪。 问题答案: 您具有比较功能来比较2个NSDate来知道哪个是最新的

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和

  • 我有两个向量: 我试图使用比较它们。不幸的是,给出了一个意想不到的结果。 虽然我希望: 那么,这是什么原因造成的呢?怎样才能达到预期的效果呢? 这个问题似乎与这样一个事实有关,即两个向量的最后一个元素与将更改为例如确实给出了预期的结果相同,并且还因为将设置为给出而不是。 编辑 换句话说,我希望丢失的元素(当长度不同时)作为零传递(只有似乎给出

  • 我想知道Hashmap和ArrayList中的搜索元素有什么比较吗?我遇到的情况如下:我将有少量的元素(通常4-6个,最多10个)。我有这样一个元素的整数id,我将得到很多调用,这些调用将使用Id搜索元素并在这个元素上执行一些方法。这看起来是hashmap的一个很好的用例,但是我开始怀疑像ArrayList这样的线性集合在这里会不会更好。例如因为CPU缓存。为了在地图上使用搜索,我需要自动装箱来从

  • < > <= >= == ~= 分别表示 小于,大于,不大于,不小于,相等,不相等 所有这些操作符总是返回 true 或 false。 对于 Table,Function 和 Userdata 类型的数据,只有 == 和 ~=可以用。相等表示两个变量引用的是同一个数据。比如: a={1,2} b=a print(a==b, a~=b) -- true, false a={1,2} b={1,2}