【发布时间】:2014-03-23 17:40:13
【问题描述】:
我生成了1000 x 1000的两个矩阵:
第一个矩阵:O 和 #。
第二个矩阵:O 和 B。
使用以下代码,第一个矩阵需要 8.52 秒才能完成:
Random r = new Random();
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 1000; j++) {
if(r.nextInt(4) == 0) {
System.out.print("O");
} else {
System.out.print("#");
}
}
System.out.println("");
}
使用此代码,第二个矩阵需要 259.152 秒才能完成:
Random r = new Random();
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 1000; j++) {
if(r.nextInt(4) == 0) {
System.out.print("O");
} else {
System.out.print("B"); //only line changed
}
}
System.out.println("");
}
运行时间显着不同的原因是什么?
按照 cmets 的建议,仅打印 System.out.print("#"); 需要 7.8871 秒,而 System.out.print("B"); 给出 still printing...。
正如其他人指出它对他们正常工作一样,我尝试了 Ideone.com,例如,两段代码以相同的速度执行。
测试条件:
- 我从 Netbeans 7.2 运行了这个测试,输出到它的控制台
- 我使用
System.nanoTime()进行测量
【问题讨论】:
-
尝试将 rand.nextInt(4) == 0 更改为 i
-
两者似乎都在我的机器上运行了相同的时间,大约 4 秒。
-
如果您建议打印 B 比打印 #.... 为什么不尝试打印所有 B & all # 而不是依赖随机变量 r
-
根据接受的答案,您显然没有尝试将输出重定向到文件或 /dev/null 来运行它。
-
@fejese,Random() 不是加密 rng,因此不会用完熵池。
标签: java performance loops for-loop system.out