Is there any difference in the performance of insert() vs append() from StringBuilder class? I will be building plenty of short string as text identifiers and asked myself this question... Should I initialize SB with a separator and use insert + append or just append ?
It is O(1) when appending single characters. A StringBuilder is like an ArrayList. When you append a single item the cost is O(1).
Creating and initializing a new object is more expensive than appending a character to an buffer, so that is why string builder is faster, as a general rule, than string concatenation.
String is immutable whereas StringBuffer and StringBuilder are mutable classes. StringBuffer is thread-safe and synchronized whereas StringBuilder is not. That's why StringBuilder is faster than StringBuffer.
It means two threads can call the methods of StringBuilder simultaneously. StringBuffer is less efficient than StringBuilder. StringBuilder is more efficient than StringBuffer.
Knowing that:
insert
at the end of the string representation is equivalent to an append
in term of time complexity (O(n)).insert
anywhere else than at the end can't be obtained with an append
(as they have differents purposes).insert
may involve up to 3 System.arraycopy
(native) calls, while an append
1.You can easily conclude:
append
insert
Doing so, you will have the best performance. But again, these two methods serving two differents purposes (with the exception of inserting at the end), there is no real question here.
They have different functionalities and different complexities,
insert
:
Where append
:
So if you want to always add to the tail, then the performance will be the same since insert
will not push any elements.
So, I would use append
, it is just cleaner.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With