用于循环代码优化

时间:2011-07-24 21:57:48

标签: java optimization loops

我有一个挑战是以最简单的方式使用for循环将7的倍数(非负数)打印到第50个倍数。

我提出了这个(忽略数据类型)

for(int i = 0; i <= 350; i += 7)
         {System.out.println(i);}

另一个人想出了这个

for(int i=0;i <=50; i++)
{
System.out.println(7*i);
}

但是,我觉得这两个代码段可以进一步优化。如果它真的可以请告诉。一个优于另一个的优点/缺点是什么?

4 个答案:

答案 0 :(得分:9)

如果您真的想要优化它,请执行以下操作:

System.out.print("0\n7\n14\n21\n28\n35\n42\n49\n56\n63\n70\n77\n84\n91\n98\n105\n112\n119\n126\n133\n140\n147\n154\n161\n168\n175\n182\n189\n196\n203\n210\n217\n224\n231\n238\n245\n252\n259\n266\n273\n280\n287\n294\n301\n308\n315\n322\n329\n336\n343\n350");

并且它是O(1):)

答案 1 :(得分:3)

第一个技术上执行较少的操作(没有乘法)。

第二个稍微更具可读性(7倍的50倍,7倍的倍数,最高350倍)。

可能无法进一步优化。

除非您愿意通过以下方式优化多个println来电:

StringBuilder s = new StringBuilder();

for(int i = 0; i <= 350; i += 7) s.append(i).append(", ");

System.out.println(s.toString());

(IIRC println相对昂贵。)

这已经达到了以简单为代价获得一点点优化的程度。

答案 2 :(得分:1)

理论上,您的代码更快,因为每个循环不需要少一个乘法指令。

但是,对System.out.println的多次调用(以及整数到字符串的转换)将 dwarf 乘法所需的运行时间。要优化,使用StringBuilder聚合字符串并输出整个结果(或在内存成为问题时输出结果)。

但是,在实际代码中,不太可能成为瓶颈。 个人资料,然后优化

答案 3 :(得分:0)

第二个功能是你得到的最好的: 为O(n)