import java.io.*; import java.util.*; public class Driver { public static void main(String[] args) { ArrayList<Integer> n = new ArrayList<Integer>(); /* PART ONE: long time1,time2,time3; time1 = System.currentTimeMillis(); for(int i=0; i<200000; i++) { n.add(0,i); } time2 = System.currentTimeMillis(); for (int i=0; i<200000; i++) { n.add(i); } time3 = System.currentTimeMillis(); System.out.println(time2 - time1); System.out.println(time3 - time2); ~~~~~~~~~~~ RESULTS ~~~~~~~~~~~ Add to beginning: 1000 nums --> 1 millisec 10000 nums --> 38 millisec 100000 nums --> 3945 millisec 200000 nums --> 20552 millisec Add to end: 1000 nums --> 0 millisec 10000 nums --> 1 millisec 100000 nums --> 13 millisec 200000 nums --> 18 millisec CONCLUSION: adding to the end is faster than adding to the beginning */ /* PART TWO: long time1,time2; for(int i=0; i<1000; i++) { n.add(i); } time1 = System.currentTimeMillis(); while (n.isEmpty() == false) { n.remove(0); } time2 = System.currentTimeMillis(); System.out.println(time2-time1); for(int i=0; i<10000000; i++) { n.add(i); } time1 = System.currentTimeMillis(); while (n.isEmpty() == false) { n.remove(n.size()-1); } time2 = System.currentTimeMillis(); System.out.println(time2-time1); ~~~~~~~~~~~ RESULTS ~~~~~~~~~~~ Remove from beginning: 1000 nums --> 1 millisec 10000 nums --> 42 millisec 100000 nums --> 4288 millisec 200000 nums --> 22723 millisec 1000000 nums --> too long to test 10000000 nums --> too long to test Remove from end: 1000 nums --> 0 millisec 10000 nums --> 1 millisec 100000 nums --> 1 millisec 200000 nums --> 2 millisec 1000000 nums --> 10 millisec 10000000 nums --> 110 millisec CONCLUSION: removing from end is faster than removing from the beginning by far */ // PART THREE: REVERSE LSIT for (int i=0; i<10; i++) { n.add(i*10); } System.out.println("Original list: " + n); ArrayList<Integer> tmp = new ArrayList<Integer>(); for (int i=n.size(); i>0; i--) { tmp.add(n.get(i-1)); } n = tmp; System.out.println("Reversed list: " + n); } }