栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中,以下哪段代码更快?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中,以下哪段代码更快?

当您降至最低级别(机器代码,但我将使用汇编语言,因为它主要是一对一映射)时,空循环递减为0和一个递减为50(例如)之间的差异通常沿着的行:

      ld  a,50     ld  a,0loop: dec a  loop: inc a      jnz loop     cmp a,50        jnz loop

这是因为大多数零碎CPU中的零标志在达到零时由减量指令设置。当增量指令达到50时,通常不能说相同(因为该值没有什么特别之处,不像零)。因此,您需要将寄存器与50进行比较以设置零标志。


但是,请问两个循环中的哪个:

for(int i = 100000; i > 0; i--) {}for(int i = 1; i < 100001; i++) {}

更快(几乎在 任何 环境下,Java或其他情况下)都没有用,因为它们都不起作用。这两个循环的 最快
版本根本没有循环。我向任何人发起挑战,要求他们提供比这更快的版本:-)

仅当您开始在牙套内进行一些有用的工作时,它们才会变得有用,并且此时, 工作 将决定您应使用哪个顺序。

例如,如果您 需要
从1到100,000进行计数,则应使用第二个循环。这是因为递减计数(如果有的话)的优势可能会因

100000-i
每次使用循环时都必须在循环内进行评估而被淹没。用汇编术语来说,这将是以下两者之间的区别:

     ld  b,100000  dsw a     sub b,a     dsw b

dsw
当然是臭名昭著的
do something with
汇编器助记符)。

由于您每次迭代只会将一次命中用于递增循环,并且每次迭代将 至少 一次将其用于减法(假设您将使用

i
,否则根本不需要循环) ),则应使用更自然的版本。

如果您需要数数,请数数。如果您需要倒数,请倒数。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/573690.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号