【发布时间】:2020-03-14 19:47:45
【问题描述】:
将字符串子字符串复制到 StringBuilder 的最快方法是什么? 我试过了:
-
builder.append(string.substring(start, end))但它使用两个数组副本。 -
builder.append(string, start, end)但它使用 for 循环而不是数组复制
遗憾的是StringBuilder#getValue 是私有包,所以我不能在String#getChars 中使用它。
此外,StringBuilder 是最终的,这意味着我无法更改 getValue 访问或添加将使用 String#getChars 而不是 for 循环的 append(str, start, end) 方法。
我想我错过了一些东西。我的意思是我不能成为第一个想要这个功能的人。
更新:
正如@Slaw 所说,StringBuilder#append(CharSequence, int, int) 在 9 到 13 之间更改为使用 arraycopy 而不是 for 循环。我很高兴这个“问题”得到了解决。
【问题讨论】:
-
你为什么在乎?你有从 O(n) 到 O(n^2) 或类似的用例吗?
-
也许实现已经从您正在查看的任何版本更改,但当前
StringBuilder#append(CharSequence,int,int)在第一个参数是Sting的实例时尝试使用arraycopy。见github.com/openjdk/jdk/blob/master/src/java.base/share/classes/… -
OpenJDK 8 中的@Slaw 真的很有趣,这是不同的
-
我还是很好奇你为什么这么关心字符串缓冲区的性能。
标签: java performance java-8