// Illustrates inefficient strings // badLongString is quadratic // goodLongString is linear public class TestString { static String badLongString( int n ) { String result = ""; for( int i = 0; i < n; i++ ) result += 'A'; return result; } static String goodLongString( int n ) { StringBuffer result = new StringBuffer( ); for( int i = 0; i < n; i++ ) result.append( 'A' ); return new String( result ); } public static void main( String [ ] args ) { long time = System.currentTimeMillis( ); String theString; // Test them first System.out.println( "Should twice print 20 As next" ); System.out.println( goodLongString( 20 ) ); System.out.println( badLongString( 20 ) ); // Time the efficient implementation for( int i = 1000; i < 1000000; i *= 2 ) { theString = goodLongString( i ); long newTime = System.currentTimeMillis( ); System.out.println( "Time for goodLongString( " + i + " ) is " + ( newTime - time ) ); time = newTime; } // Time the inefficient implementation for( int i = 1000; i < 100000; i *= 2 ) { theString = badLongString( i ); long newTime = System.currentTimeMillis( ); System.out.println( "Time for goodLongString( " + i + " ) is " + ( newTime - time ) ); time = newTime; } } }