循环优化 问题

/**
 * @(#)TestFor.java
 *
 *
 * @author 
 * @version 1.00 2009/7/20
 */

public class TestFor {
        
    /**
     * Creates a new instance of <code>TestFor</code>.
     */
    public TestFor() {
    }
    


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
      Test1();     //219    234  250  187  266
      Test2();     //187ms  203  218  110
     TestLinkString();    //31ms
      TestLinkString2(); //16ms
      TestIntMeth(); //3515 3438  2641 3453 3391
      TestIntMeth2() ; //3453  3422  3000 2157 3406
       
       TestString1();    //31ms  15
       TestString2();      //16ms  15
    }
    
    
    
    
    //1 /////////////////////慢  
    public  static  void   Test1()
    {   
    	
    	long ts = System.currentTimeMillis();    
    	//  Integer.MAX_VALUE  =  2147483647
    	//  Integer.MIN_VALUE
        for(int i=0;i<1000;i++){    
           System.out.println("dd:"+i);
        }     
        long te = System.currentTimeMillis();     
		System.out.println("时间差1:"+(te-ts));
      
   	}
   	
   	//快 
   	public   static  void  Test2()
   	{	
   		long ts = System.currentTimeMillis();    
   		for(int i=1000;i>=0;i--){    
          System.out.println("dd:"+i);
      } 
      	 long te = System.currentTimeMillis();     
		System.out.println("时间差2:"+(te-ts));
   	}   
     //时间差1:281
	 //时间差2:235
	 
	 
	 
   //22////////////////////////////////TryCatch 放在 for 外面
    
    public   static   void  TestTryCatch()
    {     
    	//慢 
    	 for(int i=1000;i>=0;i--){    
			 try{    
			   
			 }catch(Exception ex){    
			 
			 }    
		 } 	
    }
    
    
      public   static   void  TestTryCatch2()
      {    
    	try{  
    	//慢 
    	 for(int i=1000;i>=0;i--){  	 
		     System.out.println("dd:"+i);
		  } 	   
		 }catch(Exception ex){ 	}   
      }
    
    // 一目了然
    
    
    ////333//////////////尽量不要在循环内有多余的方法调用   
    
    public static int  IntMethod(){
    	return  10000;
    }
    
    public  static  void   TestIntMeth()
    {	 
    	long ts = System.currentTimeMillis(); 
         for(int i=IntMethod();i>=0;i--){ 
      	   System.out.println("dd :"+i);
          } 
    	long te = System.currentTimeMillis();     
		System.out.println("时间差TestIntMeth :"+(te-ts));
     } 
    //优化  
     public  static  void   TestIntMeth2()  
     {  	long ts = System.currentTimeMillis(); 
     	int len = IntMethod();  
        for(int i=len;i>=0;i--){
        	 System.out.println("dd :"+i);
        }   	
        long te = System.currentTimeMillis();     
		System.out.println("时间差TestIntMeth :"+(te-ts));
     }
 
    
    
    
    ////44///////////////////在循环中最好不要拼接字符串
    /*String是不变类,对其更改都会重新创建字符串,从而导致内存和速    
   度的问题,另外StringBuilder是sun为解决字符串操作效率低下而创建    
   地(StringBuffer早),有字符buffer,解决字符的增删改都是比较快 */  
    public static  void  TestLinkString()
    {
    	
    	 String str = "";   
    	 long ts = System.currentTimeMillis();     
		 for (int i = 1000; i >=0 ; i--) {    
		     // 慢     
		     str += "慢 ";    
		 } 
		  System.out.println("dd:"+str);
		long te = System.currentTimeMillis();     
		System.out.println("时间差3 LinkString:"+(te-ts));
    }
    
     public static  void  TestLinkString2()
    {
    	 long ts = System.currentTimeMillis();     
		 StringBuilder yourString = new StringBuilder();    
		 for (int i = 1000; i >=0 ; i--) {    
		     // 快     占用内存小
		     yourString.append("快");    
		 }  
		System.out.println("dd:"+yourString);
		long te = System.currentTimeMillis();     
		System.out.println("时间差4 LinkString:"+(te-ts));
    }
    
    
    
    ////555///////在循环中最好不要拼接字符串2
    public  static  void  TestString1()
    {
    		 long ts = System.currentTimeMillis();     
    	 StringBuilder yourString = new StringBuilder();    
		 for (Integer i = 1000; i >=0 ; i--) {    
		     yourString.append(" " + i);    
		 }
		 	System.out.println("dd:"+yourString);
		 	long te = System.currentTimeMillis();     
	     	System.out.println("时间差5 1 String:"+(te-ts));
    }
    //优化
     public  static  void  TestString2()
    {     long ts = System.currentTimeMillis();     
    	 StringBuilder yourString = new StringBuilder();    
		 for (Integer i = 1000; i >= 0; i--) {    
     		yourString.append(i.toString());    
 		} 
 		System.out.println("dd:"+yourString);
 		long te = System.currentTimeMillis();     
	    System.out.println("时间差5 2 String:"+(te-ts));	
    }
    
}








优化循环体:
	循环是比较重复运行的地方,如果循环次数很大,循环体内不好的代码对效率的影响就会被放大而变的突出。
让我们看看下面的代码片:
Vector vect = new Vector(1000);
for( inti=0; i<vect.size(); i++){
	
}

for循环部分改写成:

int size = vect.size();
for( int i=0; i>size; i++){
	
}

如果size=1000,就可以减少1000次size()的系统调用开销,避免了循环体重复调用


优化循环体:
再看如下的代码片:
for (int i = 0;i <100000;i++)
  if (i%10 == 9) {
   // 每十次执行一次
  }  
}
	

改写成也可以提高效率:
for(int i =0,j = 10; i<100000; i++,j--){
 if(j == 0){
  // 每十次执行一次
  j = 10;
 }
}







你可能感兴趣的:(sun)