构造多个字符串时使用StringBuilder是否有显着的性能优势?

问题描述 投票:2回答:2

假设我正在构建一组字符串,其中每个字符串都是下一个的前缀。例如,假设我编写了一个函数:

public Set<String> example(List<String> strings) {
    Set<String> result = new HashSet<>();
    String incremental = "";
    for (String s : strings) {
        incremental = incremental + ":" + s;
        result.add(incremental);
    }
    return result;
}

值得使用StringBuilder而不是串联重写它吗?显然,这样做可以避免在循环的每次迭代中构造一个新的StringBuilder,但是我不确定这是否对大型列表有显着的好处,或者您通常希望通过在循环中使用StringBuilders避免的开销仅仅是不必要的String构造。

java stringbuilder
2个回答
0
投票

[通常,您总是想循环使用StringBuilder,因为O(n)算法变成O(n ^ 2)。但是,这已经是O(n ^ 2)。甚至所需的内存使用量都是O(n ^ 2)。看起来似乎并不重要,但是可能存在两个性能差异的因素。另外,从评论中您可以看到,读者期望StringBuilder-不要让他们感到不必要的惊讶。


0
投票

此答案仅对Java 8是正确的;正如@ user85421指出的那样,字符串的+StringBuilder和更高版本中不再编译为Java 9操作。

© www.soinside.com 2019 - 2024. All rights reserved.