Esta es una pequeña comparación de mostrar 100000 veces "Hola" por pantalla de la forma tradicional (usando System.out.println) vs. una mejor forma (usando PrintWriter).
PRIMERA FORMA: Usando System.out.println
public class Prueba1
{
public static void main(String[] args)
{
long ini = System.nanoTime();
for (int i = 0; i < 100000; i++)
{
System.out.println("Hola "+i );
}
long fin = System.nanoTime();
System.out.println("Tarda "+(fin-ini)/1000000000+" s.");
}
}
SEGUNDA FORMA: Usando PrintWriter
import java.io.PrintWriter;
public class Prueba2
{
public static void main(String[] args)
{
long ini = System.nanoTime();
PrintWriter out = new PrintWriter(System.out);
for (int i = 0; i < 100000; i++)
{
out.println("Hola "+i);
}
out.flush();
long fin = System.nanoTime();
System.out.println("Tarda "+(fin-ini)/1000000000+" s.");
}
}
La diferencia es 5 a 1. La segunda forma de mostrar en Java resultó ser más eficiente que la forma tradicional (al menos para mi), de hacer mostrar.
Compruébenlo Uds. mismos.
NOTA ADICIONAL
El mensaje que se muestra al final en ambas pruebas es cuanto ha tardado el programa en segundos.
Comentarios
Con el StringBuilder se logra un rendimiento bastante similar:
package TestJava;
import java.io.PrintWriter;
public class Prueba2
{
public static void main(String[] args)
{
long ini = System.nanoTime();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100000; i++)
{
sb.append("hola");
sb.append(i);
sb.append("\n");
}
System.out.println(sb);
long fin = System.nanoTime();
System.out.println("Tarda "+(fin-ini)/1000000+" ms.");
}
}
Hey cristian tienes razon
hice la prueba y con el clasico System.out.println tarda 69 seg en mi pc
y con el PrintWriter tardo solo 12 segundos.
Ahora ya veo que claudia tiene razon http://ajayu.memi.umss.edu.bo/claudiau/weblog/chistesito
jajaaa
pero no es cierto :P
hice la prueba con el juez virtual acm.timus.ru la verdad no existe diferencia en tiempos de ejecucios, al utilizar System.out.println y PrintWriter , bueno esto se debe a que las salidas de las respuestas son pequeñas.
pero para imprimir en cantidad es recomendable utilizar PrintWriter
.
Willy at # 4, test the tests... y verás la diferencia...
a propósito, cuando test the net?
import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Font; import java.awt.Color; import java.awt.RenderingHints; import java.awt.Dimension; import javax.swing.JPanel; import javax.swing.JFrame; public class Hola1000 extends JPanel { static Dimension d; public void Hola1000() {} public void paint( Graphics g ) { Graphics2D g2=(Graphics2D)g; g2.clearRect(0,0,getSize().width,getSize().height); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int N=1000; for (int i = 0; i < N; i++) { g2.setFont(new Font("Helvetica",Font.BOLD,(int)(50*Math.random()))); g2.setColor(new Color(((int)(Math.random()*255)), ((int)(Math.random()*255)), ((int)(Math.random()*255)))); g2.drawString("Hola "+i,(int)(d.width*Math.random()),(int)(d.height*Math.random())); } } public static void main(String[] args) { long ini = System.nanoTime(); Ventana v = new Ventana(); long fin = System.nanoTime(); System.out.println("Tarda "+(fin-ini)/1000000000+" s."); } static class Ventana extends JFrame { public Ventana() { super.setTitle("Hola JFrame"); d = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setSize(d); this.getContentPane().add(new Hola1000()); setBackground(Color.white); setVisible(true); } } }Bueno no deberias hacer esto:
System.out.println("Tarda "+(fin-ini)/1000000000+" s.");
solo
System.out.println("Tarda "+(fin-ini)+" s.");
y tendrás el tiempo en milisegundos :)SALUDOS
import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.Graphics2D; import java.awt.Graphics; import java.awt.Font; import java.awt.Color; import java.awt.RenderingHints; import java.awt.Dimension; import javax.swing.UIManager; public class Prueba3 extends JPanel { static Dimension d; static long ini; static long fin; public void Prueba3() {} public void paint( Graphics g ) { Graphics2D g2=(Graphics2D)g; g2.clearRect(0,0,getSize().width,getSize().height); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int N=100000; for (int i = 0; i < N; i++) { g2.setFont(new Font("Helvetica",Font.BOLD,(int)(50*Math.random()))); g2.setColor(new Color(((int)(Math.random()*255)), ((int)(Math.random()*255)), ((int)(Math.random()*255)))); g2.drawString("Hola "+i,(int)(getSize().width*Math.random()),(int)(getSize().height*Math.random())); if(i==(N-1)) { fin = System.nanoTime(); double deltaTiempo = (fin-ini); System.out.println("Tarda "+(deltaTiempo)+" nano segundos."); System.out.println("Tarda "+(deltaTiempo/1000000)+" mili segundos."); System.out.println("Tarda "+(deltaTiempo/1000000000)+" segundos."); } else if(i==0) ini = System.nanoTime(); } } public static void main(String[] args) { Ventana v = new Ventana(); } static class Ventana extends JFrame { public Ventana() { super.setTitle("Hola JFrame"); d = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setSize(d); this.getContentPane().add(new Prueba3()); setBackground(Color.white); setVisible(true); } } }