Appending Strings - Java Tutorials

Appending Strings - Java Tutorials

Ads

Tutorials   
Java final method Assert in Java Final method in java Autoboxing in Java assert In Java JDBC batch insert using Java bean class Java Singleton Pattern Java Collection API - Java Tutorials Stack Overflow - Java Tutorials End of Year Puzzle The link to the outer class,java tutorial,java tutorials Orientating Components Right to Left,java newsletter,java,tutorial Non-virtual Methods in Java - java tutorials Multicasting in Java - java tutorials,tutorial Creation Time Comparison of Multi Dimensional Array- Java Tutorials Making Exceptions Unchecked - java tutorial,java tutorials Making Enumerations Iterable - JDK 5 Example Which is Faster - LinkedList or ArrayList? LinkedHashMap - Java Tutorials HashMap and HashCode JDK 1.4 the NullPointerException - Java Tutorials Java HashMap - Java Tutorials Java GC java awt package tutorial Java Multi Dimensions Array - Java Tutorials Java HashSet  - Java Tutorials Java Field Initialisation - Java Tutorials Java Comments - Java Tutorials J2EE Singleton Pattern - Design Pattern Tutorials Java - JDK Tutorials garbage collection in java Final Methods - Java Tutorials Exceptional Constructors - Java Tutorials Double-checked locking,java tutorials,java tutorial Disassembling Java Classes - Java Tutorials Java Deadlocks - Java Deadlocks Tutorials, Deadlocks in Java Commenting out your code - Java Tutorials Class names don't identify a class - Java Tutorials Causing Deadlocks in Swing Code Exception in Java - Java Tutorials Catching Exceptions in GUI Code - Java Tutorials boolean comparisons - tutorial Interthread Communication in Java BASIC Java - Java Tutorials Thread Deadlocks - Java Tutorials Autoboxing unboxing in Java - Java Tutorials Assertion in Java Appending Strings - Java Tutorials Anonymous Inner Classes - Anonymous Inner Classes tutorial Assertion in java
Ads

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.

Advertisements

Share on Google+Share on Google+

Appending Strings - Java Tutorials

Posted on: April 18, 2011 If you enjoyed this post then why not add us on Google+? Add us to your Circles

Advertisements

 

Discuss: Appending Strings - Java Tutorials  

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments:5
Lino
August 23, 2011
Size?

What happens if you over-size or under-size the StringBuffer?
tiff
November 3, 2011
append

whats the use of append
Jyoti
February 18, 2012
append()

nice description through the example
simeon
July 12, 2012
Appending strings

how do you append strings?
Jayanth
April 16, 2013
Complement

Thank you

Ads

 

Ads