为什么打印“B”比打印“#”要慢得多?

问题:

我生成了1000 x 1000的两个矩阵
第一矩阵:O#
第二矩阵:OB
使用以下代码,第一个矩阵需要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(""); } [/code] 使用这段代码,第二个矩阵花了259.152秒完成: [code lang="python"] 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(""); } [/code] 什么原因背后的戏剧性不同的运行时间? 如评论中所建议的,仅打印System.out.print(“#”);需要7.8871秒,而System.out.print("B");still printing...
正如其他人指出它正常工作的那样,我尝试了Ideone.com,两个代码以相同的速度执行。
测试条件:

  • 我从Netbeans 7.2运行了这个测试,输出到控制台
  • 我使用System.nanoTime()进行测量

回答:

 Pure speculation是使用一个尝试word-wrapping而不是字符包装的终端,并将B视为一个字符,而#作为非字符字符。所以当它到达一条线的末端,并搜索一个地方打破线,它看到一个#几乎立即和愉快地打破那里;而对于B,它必须继续搜索更长的时间,并且可以具有更多的文本包裹(在一些终端上可能是昂贵的,例如输出后退空间,然后输出空格以覆盖被包装的字母)。
但这是纯粹的猜测。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why is printing “B” dramatically slower than printing “#”?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

70 − 66 =