为什么打印“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("");
 }

使用此代码,第二个矩阵需要 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("");
}

运行时间显着不同的原因是什么?


正如评论中所建议的,仅打印 System.out.print("#"); 需要 7.8871 秒,而 System.out.print("B"); 给出 still printing...

正如其他人指出它对他们正常工作一样,我尝试 了 Ideone.com ,并且两段代码都以相同的速度执行。

测试条件:

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

原文由 Kuba Spatny 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
1 个回答

纯粹的猜测 是您使用的终端尝试进行 自动换行 而不是字符换行,并将 B 视为单词字符但 # 视为非单词字符.因此,当它到达一行的末尾并搜索断行的地方时,它几乎立即看到了一个 # 并且很高兴地在那里断行;而使用 B ,它必须继续搜索更长的时间,并且可能有更多的文本要换行(这在某些终端上可能很昂贵,例如,输出退格,然后输出空格以覆盖被换行的字母) .

但这纯粹是猜测。

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题