Forward Looping

Forward looping is loop from starting element and continues to the end of the elements. 0..1..2..3..End. Most of the time, may be i can said all the time we are using this type of looping method to loop through an array, List or collection.

for (int i=0; i< lList.size(); i++)

Reverse Looping

Reverse looping is loop from end of the element and continues to the starting elements. End..9..8..0. Most of the time, may be i can said all the time we are not using this type of looping method.

for (int i=lList.size()-1; i > 0; i--)

Performance Test

Here i create two tiny programs to use forward loop and reverse loop to traverse 15 millions of data, and display the elapse time in output.

1. Forward Looping

import java.util.Arrays;
import java.util.Date;
import java.util.List;
 
public class LoopTestForward {
  public static void main(String[] argv) {
 
	  String sArray[] = createArray();
 
	  //convert array to list
	  List lList = Arrays.asList(sArray);
	  int iListSize = lList.size();
 
          //Forward Loop Testing 
	  System.out.println("\n--------- Forward Loop --------\n");
	  long lForwardStartTime = new Date().getTime();
	  System.out.println("Start: " + lForwardStartTime);
 
	  //for loop
	  for (int i=0; i< iListSize; i++){
		  String stemp = (String)lList.get(i);
	  }
 
	  long lForwardEndTime = new Date().getTime();
	  System.out.println("End: " + lForwardEndTime);
 
	  long lForwardDifference = lForwardEndTime - lForwardStartTime;
	  System.out.println("Forward Looping - Elapsed time in milliseconds: " + lForwardDifference);
 
	  System.out.println("\n-------END-------");
 
 
  }
 
  static String [] createArray(){
 
	  String sArray[] = new String [15000000];
 
	  for(int i=0; i<15000000; i++)
		  sArray[i] = "Array " + i;
 
	  return sArray;
  }
}

2. Reverse Looping

import java.util.Arrays;
import java.util.Date;
import java.util.List;
 
public class LoopTestReverse {
  public static void main(String[] argv) {
 
	  String sArray[] = createArray();
 
	  //convert array to list
	  List lList = Arrays.asList(sArray);
	  int iListSize = lList.size();
 
	  //Reverse Loop Testing 
	  System.out.println("\n--------- Reverse Loop --------\n");
	  long lReverseStartTime = new Date().getTime();
	  System.out.println("Start: " + lReverseStartTime);
 
	  //for loop
	  for (int i=iListSize-1; i > 0; i--){
		  String stemp = (String)lList.get(i);
	  }
 
	  long lReverseEndTime = new Date().getTime();
	  System.out.println("End: " + lReverseEndTime);
 
	  long lReverseDifference = lReverseEndTime - lReverseStartTime;
	  System.out.println("For - Elapsed time in milliseconds: " + lReverseDifference);
 
	  System.out.println("\n-------END-------");
 
  }
 
  static String [] createArray(){
 
	  String sArray[] = new String [15000000];
 
	  for(int i=0; i<15000000; i++)
		  sArray[i] = "Array " + i;
 
	  return sArray;
  }
}
D:\test>java -Xms1024m -Xmx1024m LoopTestFoward
D:\test>java -Xms1024m -Xmx1024m LoopTestReverse

Performance Test Result (in milliseconds)

Conclusion

The result show there’s not much different between forward and reverse looping in 1 million of data. However when data grow huge, the performance of reverse looping is slightly faster than forward looping around 15%.

May be you will question about who so stupid to load 1 million of data into a single List or Collection. Please imagine a multi-thread system environment, where 100k people concurrent access your “forward loop x 10″, it already over 1 million. Ya i know sometime the different is negligible, but i do believe believe “Reverse loop” is a good habit in programming , it can increase the performance. It’s sound weird …but performance show.

Tags :
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider making a donation to the charity, thanks.

Related Posts

Popular Posts