StringBuilder
Mutable string operations
Interview Relevant: Performance optimization questions
6 min read
StringBuilder - Mutable Strings
StringBuilder is a mutable sequence of characters. Unlike String, it can be modified without creating new objects, making it ideal for string manipulation.
Key Characteristics
- Mutable: Can be modified in place
- NOT thread-safe: Faster but not synchronized
- Dynamic capacity: Grows automatically
- No String Pool: Always on heap
✓ When to Use: String concatenation in loops, building strings dynamically, or any scenario with many string modifications.
💡 Performance: StringBuilder is ~100x faster than String concatenation in loops!
Code Examples
Creating and basic append operations
java
1// Creating StringBuilder
2StringBuilder sb1 = new StringBuilder(); // Empty, capacity 16
3StringBuilder sb2 = new StringBuilder(100); // Empty, capacity 100
4StringBuilder sb3 = new StringBuilder("Hello"); // From String
5
6// Basic operations
7sb1.append("Hello");
8sb1.append(" ");
9sb1.append("World");
10System.out.println(sb1); // "Hello World"
11
12// Chaining (methods return same StringBuilder)
13StringBuilder sb = new StringBuilder()
14 .append("Hello")
15 .append(" ")
16 .append("World")
17 .append("!");
18System.out.println(sb); // "Hello World!"
19
20// Convert to String
21String result = sb.toString();Common StringBuilder methods
java
1// StringBuilder methods
2StringBuilder sb = new StringBuilder("Hello World");
3
4// append() - Add to end
5sb.append("!"); // "Hello World!"
6
7// insert() - Insert at position
8sb.insert(5, ","); // "Hello, World!"
9
10// delete() - Remove range
11sb.delete(5, 7); // "Hello World!" (removes ", ")
12
13// deleteCharAt() - Remove single char
14sb.deleteCharAt(10); // "Hello World" (removes "!")
15
16// replace() - Replace range with string
17sb.replace(6, 11, "Java"); // "Hello Java"
18
19// reverse() - Reverse string
20sb.reverse(); // "avaJ olleH"
21sb.reverse(); // "Hello Java" (reverse back)
22
23// setCharAt() - Modify single char
24sb.setCharAt(0, 'h'); // "hello Java"
25
26// length and capacity
27System.out.println(sb.length()); // Current length
28System.out.println(sb.capacity()); // Internal buffer sizePerformance comparison with String
java
1// Performance comparison
2int iterations = 100000;
3
4// BAD: String concatenation - SLOW!
5long start1 = System.currentTimeMillis();
6String result1 = "";
7for (int i = 0; i < iterations; i++) {
8 result1 += i; // Creates new String each time!
9}
10long time1 = System.currentTimeMillis() - start1;
11System.out.println("String time: " + time1 + "ms");
12
13// GOOD: StringBuilder - FAST!
14long start2 = System.currentTimeMillis();
15StringBuilder sb = new StringBuilder();
16for (int i = 0; i < iterations; i++) {
17 sb.append(i); // Modifies same object
18}
19String result2 = sb.toString();
20long time2 = System.currentTimeMillis() - start2;
21System.out.println("StringBuilder time: " + time2 + "ms");
22
23// Result: StringBuilder is ~100x faster!Practical StringBuilder use cases
java
1// Practical examples
2
3// 1. Building CSV line
4StringBuilder csv = new StringBuilder();
5String[] values = {"Alice", "25", "Developer"};
6for (int i = 0; i < values.length; i++) {
7 csv.append(values[i]);
8 if (i < values.length - 1) csv.append(",");
9}
10System.out.println(csv); // "Alice,25,Developer"
11
12// 2. Reversing a string
13public static String reverse(String str) {
14 return new StringBuilder(str).reverse().toString();
15}
16
17// 3. Building HTML
18StringBuilder html = new StringBuilder();
19html.append("<ul>\n");
20for (String item : Arrays.asList("Item 1", "Item 2", "Item 3")) {
21 html.append(" <li>").append(item).append("</li>\n");
22}
23html.append("</ul>");
24
25// 4. Pre-allocate capacity for known size
26int estimatedSize = 1000;
27StringBuilder optimized = new StringBuilder(estimatedSize);
28// Avoids internal array resizing
29
30// 5. Palindrome check
31public static boolean isPalindrome(String str) {
32 String reversed = new StringBuilder(str).reverse().toString();
33 return str.equals(reversed);
34}Use Cases
- String concatenation in loops
- Building dynamic output (HTML, JSON, CSV)
- String reversal
- Parsing and building strings
- Buffer for text processing
- Log message construction
Common Mistakes to Avoid
- Using String concatenation in loops instead
- Not converting to String with toString()
- Using StringBuilder in multithreaded code (use StringBuffer)
- Creating new StringBuilder for each operation
- Not pre-sizing when final length is known
- Forgetting that StringBuilder is mutable