package listexamples;
import java.util.*;

public class Main {


    public static void main(String[] args) {
        // TODO code application logic here

        ArrayList<Integer> alst = new ArrayList<Integer>();

        int n = 40000;
        long tStart,tEnd;

        for (int i = 0; i < n; i++)
            alst.add(0,2*i);


        LinkedList<Integer> llst = new LinkedList<Integer>();

        for (int i = 0; i < n; i++)
            llst.add(0,2*i);
        

        long total = 0;

        tStart = System.currentTimeMillis();
        for (int i = 0; i < alst.size(); i++)
            total = total + alst.get(i);
        tEnd = System.currentTimeMillis();
        System.out.println("Arraylist time for getting everything: " + (tEnd - tStart));

        total = 0;

        tStart = System.currentTimeMillis();
        for (int i = 0; i < llst.size(); i++)
            total = total + llst.get(i);
        tEnd = System.currentTimeMillis();
        System.out.println("Linkedlist time for getting everything: " + (tEnd - tStart));

        total = 0;
        tStart = System.currentTimeMillis();
        Iterator<Integer> itr = llst.iterator();
        while (itr.hasNext())
            total = total + itr.next();
        tEnd = System.currentTimeMillis();
        System.out.println("Iterator on LinkedList: " + (tEnd - tStart));


        tStart = System.currentTimeMillis();
        int i = 0;
        while (i < alst.size())
            if ( (alst.get(i) % 4) == 0)
                alst.remove(i);
            else
                i++;
        tEnd = System.currentTimeMillis();
        System.out.println("Removing multiples of 4 on arraylist: " + (tEnd - tStart));

        tStart = System.currentTimeMillis();
        Iterator<Integer> itr1 = llst.iterator();
        while ( itr1.hasNext() )
           if ( (itr1.next() % 4) == 0 )
               itr1.remove();
        tEnd = System.currentTimeMillis();
        System.out.println("Removing multiples of 4 with iterator on linked list: " + (tEnd - tStart));


        LinkedList<Integer> llst1 = new LinkedList<Integer>();
        for (int j = 0; j < 5; j++)
            llst1.add(3*j);
        ListIterator<Integer> lItr = llst1.listIterator(0);
        lItr.next();
        lItr.set(4);
        lItr.set(5);


    }

}
