import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

/**
 * @author HAVIETTRANG
 * @date Oct 19, 2016 10:31:15 PM
 * @website haviettrang.blogspot.com
 */
public class EffectiveIterator {
    ArrayList<Integer> list = new ArrayList<>();
    
    //Khoi tao list voi 100 phan tu
    public  EffectiveIterator() {
        for (int i = 0; i < 100; i++) {
            list.add(i);
        }
    }
    //Method tinh tong cac so tu 1 toi 100
    public void sum() {
        int tong = 0;
        for (int i = 0; i < 100; i++) {
            tong += i;
        }
    }
    
    public void duyetFor(int soLan) {
        int temp = 0;
        for (int i = 0; i < soLan; i++) {
            for (int j = 0; j < list.size(); j++) {
                temp = list.get(j);
            }
        }
    }
    
    public void duyetForEach(int soLan) {
        int temp = 0;
        for (int i = 0; i < soLan; i++) {
            for (Integer integer : list) {
                temp = integer;
            }
        }
    }
    
    public void duyetIterator(int soLan) {
        int temp = 0;
        Iterator<Integer> integers = list.iterator();
        for (int i = 0; i < soLan; i++) {
            while (integers.hasNext()) {
                temp = integers.next();
            }
        }
    }
        
    public void duyetListIterator(int soLan) {
        int temp = 0;
        ListIterator<Integer> listIterator = list.listIterator();
        for (int i = 0; i < soLan; i++) {
            while (listIterator.hasNext()) {
                temp = listIterator.next();
            }
        }
    }
    
    public static void main(String[] args) {
        EffectiveIterator test = new EffectiveIterator();
        
        long start = System.currentTimeMillis();
        test.duyetFor(10000000);
        long end = System.currentTimeMillis();
        
        System.out.println("Dung vong lap FOR mat: " + (end - start) + " ms");
        
        start = System.currentTimeMillis();
        test.duyetForEach(10000000);
        end = System.currentTimeMillis();
        
        System.out.println("Dung vong lap FOR EACH mat: " + (end - start) + " ms");
        
        start = System.currentTimeMillis();
        test.duyetIterator(10000000);
        end = System.currentTimeMillis();
        
        System.out.println("Dung vong lap ITERATOR mat: " + (end - start) + " ms");
        
        start = System.currentTimeMillis();
        test.duyetListIterator(10000000);
        end = System.currentTimeMillis();
        
        System.out.println("Dung vong lap LIST ITERATOR mat: " + (end - start) + " ms");
    }
}