首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >附加字符串.性能问题- Java 6

附加字符串.性能问题- Java 6
EN

Stack Overflow用户
提问于 2015-02-25 11:46:25
回答 2查看 230关注 0票数 1

我需要重复追加字符串(大约50次),这是另一个StringBuilder的子字符串。我需要这样做大约30k的投入。我需要6分钟左右的时间。

代码语言:javascript
复制
 StringBuilder input = new StringBuilder(10000);
    StringBuilder output = new StringBuilder(10000);

//for循环到文件末尾,该循环将字符串读入变量“输入”

代码语言:javascript
复制
{
output.append(input.substring(1, 8));
output.append(input.substring(33, 45));
output.append(input.substring(20, 25)); // and so on
}

这只花了大约6分钟。

所以,我试过

代码语言:javascript
复制
{


 output.append(input.substring(1, 8) + output.append(input.substring(33, 45) + output.append(input.substring20, 25) + .. // and so on );

}

这,也采取了同样的时间。我知道这两个是一样的。

但是,即使我使用的是StringBuilder,为什么性能仍然落后呢?我做错什么了吗?

我指的是:StringBuilder vs String concatenation in toString() in JavaString concatenation in Java - when to use +, StringBuilder and concat,还有更多。他们中的大多数建议使用StringBuilder。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-25 11:56:34

最有可能的是性能问题在其他地方,因为这不应该超过一秒钟。我建议您分析一下您的应用程序,以确定其实际花费在何处的处理时间。

代码语言:javascript
复制
long start = System.currentTimeMillis();
char[] chars = new char[500];
Arrays.fill(chars, '.');
for (int i = 0; i < 30000; i++) {
    String input = new String(chars);
    StringBuilder output = new StringBuilder();
    for (int j = 0; j < 50; j++) {
        output.append(input, j * 10, j * 10 + 9);
    }
    String out = output.toString();
}
System.out.println("Took: " + (System.currentTimeMillis() - start) / 1e3 + " seconds");

打印30,000字符串的50次子字符串

代码语言:javascript
复制
Took: 0.058 seconds
票数 1
EN

Stack Overflow用户

发布于 2015-02-25 11:52:32

您绝对可以避免使用append的重载来创建这么多对象,这允许您指定子序列:

代码语言:javascript
复制
for (...)
{
    output.append(input, 1, 8);
    output.append(input, 33, 45);
    output.append(input, 20, 25);
}

这对你可能有帮助,也可能没有帮助。您的第二个示例中的字符串连接绝对应该避免--我很惊讶这并没有产生很大的差异.这意味着很可能并不是附加的东西占用了时间,而是任何读取输入的东西。

为了测试这一点,您可能应该尝试一个空的for循环,以便仍然读取所有相同的输入,但根本不附加到output中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28718227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档