回答

收藏

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

技术问答 技术问答 226 人阅读 | 0 人回复 | 2023-09-12

我生成两个1000x矩阵1000:
2 x: |. T6 g$ l+ B第一个矩阵:O和#。
7 m+ f1 k/ M& `/ O3 B, ~; g第二个矩阵:O和B。) U% i- ~. {  w- e: K
第一个矩阵需要 8.52 秒完成:3 |5 j* z4 ~+ m6 t+ n2 n3 o8 V$ r
[code]Random r = new Random();for (int i = 0; i 第二个矩阵需要 259.152 秒即可完成:
" h0 O2 N3 @: l1 t! n3 _& n$ f[code]Random r = new Random();for (int i = 0; i 运行时间明显不同的原因是什么?( _; w: I7 ^8 _( K! Y' S, G
正如评论中提出的,打印只是System.out.print("#");需要7.8871几秒钟,而System.out.print("B");给出still printing....
- \7 |. D/ v. z, L" g0 \  y  X正如其他人指出的那样,我试过 Ideone.com,而且两个代码都以同样的速度执行。
* v7 a# P$ R. Q测试条件:& |& r& t' |9 H, R# ]# r- N
我从Netbeans 7.2操作此测试并输出到其控制台' {3 K  s8 B0 ^; e
我用于System.nanoTime()测量
                                                                + o/ b. t, i( M: O0 F% \
    解决方案:                                                               
) I- F' Y  L8 Y                                                                纯粹的猜测您使用的终端尝试自动换行,而不是字符换行,并将其视为B单词字符但#视为非单词字符。因此,当它到达一条线的末端并找到一个断线的地方时,它#几乎立刻看到一个,很高兴在那里断线;使用B,它必须继续搜索更长的时间,并且可能有更多的文本来改变(这在某些终端上可能非常昂贵,例如,输出退出,然后输出空间来覆盖被改变的字母)。$ y' C; X, k8 d! g; \
但这纯粹是猜测。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则