Rechercher
 

Classe java.lang.StringBuilder

Concaténer des chaines de caractères dans des boucles peut s'avérer très couteux en temps. De nombreux objets temporaires (de type String) sont produits, ce qui fait forcer le garbage collector, et les recopies des caractères d'une chaine à l'autre vont être nombreuses.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Date;

public class HtmlGenerator {    
    
    private static final int LOOP_COUNT = 2000;
    
    
    public static String simpleGeneration() {
        String temp = "<table class='sample'>";
        
        for( int rowIndex=0; rowIndex<10; rowIndex++ ) {
            temp += "<tr>";
            for( int columnIndex=0; columnIndex<10; columnIndex++ ) {
                temp += "<td>Cell " + columnIndex + "x" + rowIndex + "</td>";
            }
            temp += "</tr>";
        }
        
        temp += "</table>";
        return temp;        
    }

    public static String optimizedGeneration() {
        StringBuilder temp = new StringBuilder( "<table class='sample'>" );
        
        for( int rowIndex=0; rowIndex<10; rowIndex++ ) {
            temp.append( "<tr>" );
            for( int columnIndex=0; columnIndex<10; columnIndex++ ) {
                temp.append( "<td>Cell " );
                temp.append( columnIndex ).append( "x" ).append( rowIndex );
                temp.append( "</td>" );
            }
            temp.append( "</tr>" );
        }
        
        temp.append( "</table>" );
        return temp.toString();        
    }

    
    public static void main(String[] args) {
        
        long begin = System.currentTimeMillis();
        for( int i=0; i<LOOP_COUNT; i++ ) {
            HtmlGenerator.simpleGeneration();
        }
        long end = System.currentTimeMillis();
        System.out.println( "Simple generation time " + (end-begin) + "ms" );

        
        begin = System.currentTimeMillis();
        for( int i=0; i<LOOP_COUNT; i++ ) {
            HtmlGenerator.optimizedGeneration();
        }
        end = System.currentTimeMillis();
        System.out.println( "Optimized generation time " + (end-begin) + "ms" );
    
    }
}
Exemple d'utilisation d'un StringBuilder