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 size

Performance 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