Java的printf()方法对于连接和打印字符串是否有效?

胡安·马丁内斯(Juan Martinez)

更新:我通过与+运算符的连接进行了测试,其性能与使用StringBuilder进行的性能几乎相同(最终结果)。正如您在回答中提到的那样,这表明性能下降是由于格式分析所致。

结论:Java的printf()并不是连接和打印字符串的有效方法。任一+操作者或优选StringBuilder应该用于更好的性能。

printf()创建字符串时,Java是否使用慢速连接?即是否在将每个元素附加到最终字符串后创建新的字符串?

我使用aStringBuilder进行了测试,创建了字符串,使运行时间提高了约4倍。该程序的这一部分在我的程序中被调用了数千次。

两次测试之间的唯一区别是以下代码块:

1)printf()(0.8秒):

System.out.printf("%d %d %d %d %d %d\n", nums[a], nums[b],
    nums[c], nums[d], nums[e], nums[f]);

2)StringBuilder+ println()(0.2秒):

StringBuilder sb = new StringBuilder();
sb.append(nums[a]);
sb.append(' ');
sb.append(nums[b]);
sb.append(' ');
sb.append(nums[c]);
sb.append(' ');
sb.append(nums[d]);
sb.append(' ');
sb.append(nums[e]);
sb.append(' ');
sb.append(nums[f]);                  
System.out.println(sb.toString());

3)+运算子+ println()(0.22秒):

System.out.println(nums[a] + " " + nums[b] + " " + nums[c] + " " + nums[d] + " "
                          + nums[e] + " " + nums[f]);
马塔蒂努斯

创建字符串时,Java的printf()是否使用慢速连接?

绝对没有 串联是很好的。

但是,由于格式字符串的分析,它的速度相当慢。有很多可能性,很多分支以及其他功能。

几乎可以(*)预先解析字符串,并使用a来处理List<FormatItem>每个FormatItem参数(al还会添加所有前面的固定文本)。一旦我做了这样的事情,它快了2倍以上。

(*)诸如此类变得更加复杂%3$s

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

打印字符串的所有变体的最有效方法?

在Jsp中打印字符串数组的Arraylist的最有效方法是什么?

是否存在确定字符串是否为有效连接字符串的可接受方法?

连接字符串的最有效方法

连接字符串的最有效方法?

对于包含多个单词的输入字符串-检查其中是否有其他字符串开头的最有效方法是什么?

C-使用printf原始打印字符串中所有不可打印的字符

以行和列模式Java打印字符串

剥离Java字符串中所有不可打印字符的最快方法

检查字符串数组中是否存在字符串的有效方法

对于简单的整数到字符串的查找,哪种查找方法最有效

mvc 应用程序中检查连接字符串是否有效的最快位置

使用printf打印字符串值

连接JavaScript中字符串的最有效方法?

用分隔符连接字符串的最有效方法是什么

在JavaScript中连接字符串的最有效方法

如何有效地从Java中的ArrayList连续连接字符串的连续间隔?

Ramda,检查字符串是否有效

此字符串加法是否有效?

关于连接对象和字符串的 Dart 问题

打印字符串?

确定值是否为字符串的最有效方法

验证给定字符串是否为有效FQDN名称的最简单方法?

检查给定字符串是否为C回文的有效方法

检查Unicode字符串是否为NFC在Python中的有效方法?

检查对象是否为字符串的最有效方法

判断字符串是否为有效日期的最快方法

查找字符串是否混合的最有效方法

检查字符串是否包含vector <string>值的有效方法?