StringBuilder insert() vs append() 性能?
StringBuilder insert() vs append() performance?
StringBuilder class 的 insert() 与 append() 的性能有何不同?我将构建大量短字符串作为文本标识符并问自己这个问题...我应该使用分隔符初始化 SB 并使用插入 + 附加还是仅附加?
它们具有不同的功能和不同的复杂性,
insert
:
- (确保备份数组的容量,必要时需要复制旧的)
- 将项目前导的元素推入插入索引(偏移量)
其中 append
:
- (确保备份数组的容量,必要时需要复制旧的)
- 将新元素添加到数组的尾部
所以如果你想总是添加到尾部,那么性能将是相同的,因为 insert
不会压入任何元素。
所以,我会使用 append
,它更干净。
根据 Java API 文档。如果使用插入,则必须提供偏移量。
StringBuilder.insert(5, "String");
但 StringBuilder.append("string")
没有。我假设追加的性能比插入的好。
知道:
- 字符串表示末尾的
insert
在时间复杂度 (O(n)) 方面等同于 append
。
- 一个
insert
除了最后 之外的任何地方都不能 用 append
获得(因为它们有不同的目的)。
- 有关信息,
insert
最多可能涉及 3 个 System.arraycopy
(本机)调用,而 append
1.
你可以很容易地得出结论:
- 如果要在字符串表示的末尾插入,使用
append
- 否则,使用
insert
这样做,你会得到最好的表现。但是同样,这两种方法服务于两个不同的目的(除了最后插入),这里没有真正的问题。
StringBuilder class 的 insert() 与 append() 的性能有何不同?我将构建大量短字符串作为文本标识符并问自己这个问题...我应该使用分隔符初始化 SB 并使用插入 + 附加还是仅附加?
它们具有不同的功能和不同的复杂性,
insert
:
- (确保备份数组的容量,必要时需要复制旧的)
- 将项目前导的元素推入插入索引(偏移量)
其中 append
:
- (确保备份数组的容量,必要时需要复制旧的)
- 将新元素添加到数组的尾部
所以如果你想总是添加到尾部,那么性能将是相同的,因为 insert
不会压入任何元素。
所以,我会使用 append
,它更干净。
根据 Java API 文档。如果使用插入,则必须提供偏移量。
StringBuilder.insert(5, "String");
但 StringBuilder.append("string")
没有。我假设追加的性能比插入的好。
知道:
- 字符串表示末尾的
insert
在时间复杂度 (O(n)) 方面等同于append
。 - 一个
insert
除了最后 之外的任何地方都不能 用append
获得(因为它们有不同的目的)。 - 有关信息,
insert
最多可能涉及 3 个System.arraycopy
(本机)调用,而append
1.
你可以很容易地得出结论:
- 如果要在字符串表示的末尾插入,使用
append
- 否则,使用
insert
这样做,你会得到最好的表现。但是同样,这两种方法服务于两个不同的目的(除了最后插入),这里没有真正的问题。