I just encountered StringBuilder
for the first time and was surprised since Java already has a very powerful String
class that allows appending.
Why a second String
class?
Where can I learn more about StringBuilder
?
I just encountered StringBuilder
for the first time and was surprised since Java already has a very powerful String
class that allows appending.
Why a second String
class?
Where can I learn more about StringBuilder
?
To be precise, StringBuilder adding all strings is O(N) while adding String's is O(N^2). Checking the source code, this is internally achieved by keeping a mutable array of chars. StringBuilder uses the array length duplication technique to achieve ammortized O(N^2) performance, at the cost of potentially doubling the required memory. You can call trimToSize at the end to solve this, but usually StringBuilder objects are only used temporarily. You can further improve performance by providing a good starting guess at the final string size.
StringBuilder is for, well, building strings. Specifically, building them in a very performant way. The String class is good for a lot of things, but it actually has really terrible performance when assembling a new string out of smaller string parts because each new string is a totally new, reallocated string. (It's immutable) StringBuilder keeps the same sequence in-place and modifies it (mutable).
Efficiency.
Each time you concatenate strings, a new string will be created. For example:
This creates a new, temporary string, copies "a" and "b" into it to result in "ab". Then it creates another new, temporary string, copies "ab" and "c" into it, to result in "abc". This result is then assigned to
out
.The result is a Schlemiel the Painter's algorithm of O(n²) (quadratic) time complexity.
StringBuilder
, on the other hand, lets you append strings in-place, resizing the output string as necessary.String class is immutable whereas StringBuilder is mutable.
Above code will create two object because String is immutable
Above code will create only one object because StringBuilder is not immutable.
Lesson: Whenever there is a need to manipulate/update/append String many times go for StringBuilder as its efficient as compared to String.
StringBuilder is good when you are dealing with larger strings. It helps you to improve performance.
Here is a article that I found that was helpful .
A quick google search could have helped you. Now you hired 7 different people to do a google search for you . :)
Java has String, StringBuffer and StringBuilder:
String : Its immutable
StringBuffer : Its Mutable and ThreadSafe
StringBuilder : Its Mutable but Not ThreadSafe, introduced in Java 1.5
String eg:
}
output: 10 Different Strings will be created instead of just 1 String.
StringBuilder eg : Only 1 StringBuilder object will be created.