如何清除或清空 StringBuilder?

2022-08-31 04:07:46

我在循环中使用了一个StringBuilder,每次x次迭代我都想清空它并以空开始,但我看不到任何类似于.NET StringBuilder的方法。在文档中清除,只是删除方法似乎过于复杂。StringBuilder

那么,在 Java 中清理 a 的最佳方法是什么呢?StringBuilder


答案 1

两种工作方式:

  1. 用。stringBuilderObj.setLength(0)
  2. 分配一个新的,而不是清除缓冲区。请注意,对于性能关键型代码路径,此方法可能比基于方法慢得多(因为需要分配具有新缓冲区的新对象,因此旧对象有资格获得 GC 等)。new StringBuilder()setLength

答案 2

基本上有两种选择,用于重置StringBuilder或在每次迭代中创建新一个。根据使用情况,两者都有优点和缺点。setLength(0)

如果您事先知道 StringBuilder 的预期容量,则每次创建一个新长度应该与设置新长度一样快。它还将有助于垃圾回收器,因为每个StringBuilder的寿命相对较短,并且gc已针对此进行了优化。

当您不知道容量时,重用相同的StringBuilder可能会更快。每次追加时超过容量时,都必须分配一个新的后备阵列,并且必须复制以前的内容。通过重用相同的StringBuilder,它将在一些迭代后达到所需的容量,并且此后不会有任何复制。


推荐