Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

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