基本上,我想知道哪种方法更好,
for(int i = 0; i < 10000; i++){
System.out.print("blah");
}
System.out.println("");
Run Code Online (Sandbox Code Playgroud)
要么
String over_9000_blahs = "";
for(int i = 0; i < 10000; i++){
over_9000_blahs += "blah";
}
System.out.println(over_9000_blahs);
Run Code Online (Sandbox Code Playgroud)
还是有更好的方法,我不知道?
由于您只写入System.out第一种方法更好,但如果性能对您很重要,请使用下面的方法(System.out.println同步并使用锁定 - 可以在此处和此处阅读更多相关信息)。
如果您想稍后使用“大字符串”或提高性能,使用StringBuilder 会更干净。(见下文),anycase String+将StringBuilder被编译器转换为(更多细节在这里)
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < 10000; i++){
stringBuilder.append("bla");
}
System.out.println(stringBuilder.toString());
Run Code Online (Sandbox Code Playgroud)
StringBuilder如果你在一个(更大的计数)循环中连接字符串,你想使用.
for(int i = 0; i < 10000; i++){
over_9000_blahs += "blah";
}
Run Code Online (Sandbox Code Playgroud)
这样做对于每次迭代:
StringBuilder内部创建一个新的内部char数组,其大小足以容纳中间结果(over_9000_blahs)over_9000_blahs到内部数组中"blah"String,再次从内部数组复制字符这是每次迭代越来越长的字符串的两个副本- 这意味着二次时间复杂度.
因为System.out.println() 可能是同步的,所以有可能重复调用它会比使用慢StringBuilder(但我的猜测是它不会比使用循环连接字符串慢+=).
所以这种StringBuilder方法应该是三者中最好的.
| 归档时间: |
|
| 查看次数: |
779 次 |
| 最近记录: |