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.