Appending Strings - Java Tutorials

Appending Strings - Java Tutorials

Appending Strings - Java Tutorials

Appending Strings

In java, the two main ways for appending string at the end are :

  • First method is using += operator.
  • Second method is using append()  method.

In this section, we will compare the performance of these two ways by taking example. We will take three tasks to compare performance. For this we also crate a separate timer class to measure the time taken.

First we will create a timer class to record the time taken. Given below the timer Class:

/**
* Class used to measure the time that a task takes to execute.
* The method "time" prints out how long it took and returns
* the time.
*/
public class Timer {
/**
* This method runs the Runnable and measures how long it takes
* @param r is the Runnable for the task that we want to measure
* @return the time it took to execute this task
*/
public static long time(Runnable r) {
long time = -System.currentTimeMillis();
r.run();
time += System.currentTimeMillis();
System.out.println("Took " + time + "ms");
return time;
}
}

Performance Comparison

In first task, we will append string using += . And in second task,  we will create a StringBuffer  and calls the append function which is the function of StringBuffer. In third task, we will create a StringBuffer of accurate size and after that we append. Given below the example:

public class StringAppendDiff {
public static void main(String[] args) {
System.out.println("String += 10000 additions");
Timer.time(new Runnable() {
public void run() {
String s = "";
for(int i = 0; i < 10000; i++) {
s += i;
}
// we have to use "s" in some way, otherwise a clever
// compiler would optimise it away. Not that I have
// any such compiler, but just in case ;-)
System.out.println("Length = " + s.length());
}
});

System.out.println(
"StringBuffer 300 * 10000 additions initial size wrong");
Timer.time(new Runnable() {
public void run() {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < (300 * 10000); i++) {
sb.append(i);
}
String s = sb.toString();
System.out.println("Length = " + s.length());
}
});

System.out.println(
"StringBuffer 300 * 10000 additions initial size right");
Timer.time(new Runnable() {
public void run() {
StringBuffer sb = new StringBuffer(19888890);
for(int i = 0; i < (300 * 10000); i++) {
sb.append(i);
}
String s = sb.toString();
System.out.println("Length = " + s.length());
}
});
}
}

Output

String += 10000 additions
Length = 38890
Took 2203ms
StringBuffer 300 * 10000 additions initial size wrong
Length = 19888890
Took 2254ms
StringBuffer 300 * 10000 additions initial size right
Length = 19888890
Took 1562ms

Conclusion

From this we can conclude that StringBuffer has about 300 times faster in speed than using +=.  Also third task concludes that if we set the correct initial size of the StringBuffer, it only takes 1562ms instead of 2254ms. This is because when the StringBuffer  size increase implicitly, it gets doubled in size, which left extra unusable size. To overcome this wastage, you can define correct initial size of the String Buffer.

Tutorials

  1. Assertion in java
  2. Anonymous Inner Classes - Anonymous Inner Classes tutorial
  3. Appending Strings - Java Tutorials
  4. Assertion in Java
  5. Autoboxing unboxing in Java - Java Tutorials
  6. Thread Deadlocks - Java Tutorials
  7. BASIC Java - Java Tutorials
  8. Interthread Communication in Java
  9. boolean comparisons - tutorial
  10. Catching Exceptions in GUI Code - Java Tutorials
  11. Exception in Java - Java Tutorials
  12. Causing Deadlocks in Swing Code
  13. Class names don't identify a class - Java Tutorials
  14. Commenting out your code - Java Tutorials
  15. Java Deadlocks - Java Deadlocks Tutorials, Deadlocks in Java
  16. Disassembling Java Classes - Java Tutorials
  17. Double-checked locking,java tutorials,java tutorial
  18. Exceptional Constructors - Java Tutorials
  19. Final Methods - Java Tutorials
  20. garbage collection in java
  21. Java - JDK Tutorials
  22. J2EE Singleton Pattern - Design Pattern Tutorials
  23. Java Comments - Java Tutorials
  24. Java Field Initialisation - Java Tutorials
  25. Java HashSet  - Java Tutorials
  26. Java Multi Dimensions Array - Java Tutorials
  27. java awt package tutorial
  28. Java GC
  29. Java HashMap - Java Tutorials
  30. JDK 1.4 the NullPointerException - Java Tutorials
  31. HashMap and HashCode
  32. LinkedHashMap - Java Tutorials
  33. Which is Faster - LinkedList or ArrayList?
  34. Making Enumerations Iterable - JDK 5 Example
  35. Making Exceptions Unchecked - java tutorial,java tutorials
  36. Creation Time Comparison of Multi Dimensional Array- Java Tutorials
  37. Multicasting in Java - java tutorials,tutorial
  38. Non-virtual Methods in Java - java tutorials
  39. Orientating Components Right to Left,java newsletter,java,tutorial
  40. The link to the outer class,java tutorial,java tutorials