exo2: Add for real.
[Project_POO.git] / exo2 / Main.java
diff --git a/exo2/Main.java b/exo2/Main.java
new file mode 100644 (file)
index 0000000..85d48b5
--- /dev/null
@@ -0,0 +1,118 @@
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.ListIterator;
+import java.util.concurrent.TimeUnit;
+
+class Main {
+
+    private static <E> void addMiddle(ArrayList<E> array, E value) {
+        int mid = array.size() / 2;
+        array.add(mid + 1, value);
+    }
+
+    private static <E> void addMiddle(LinkedList<E> list, E value) {
+        int mid = list.size() / 2;
+        list.add(mid + 1, value);
+    }
+
+    /**
+     * Should mimic the collection add(int index, T value) method
+     * @param  array [description]
+     * @param  value [description]
+     * @return       [description]
+     */
+    private static <E> void addMiddleIter(ArrayList<E> array, E value) {
+        int mid = array.size() / 2;
+        ListIterator<E> iter = array.listIterator();
+        int i = 0;
+        // go to the element at mid index
+        while (iter.hasNext() && i < mid) {
+            iter.next();
+            i++;
+        }
+        iter.next(); // Insert before mid + 1
+        iter.add(value);
+
+    }
+
+    /**
+     * Should mimic the collection add(int index, T value) method
+     * @param  list  [description]
+     * @param  value [description]
+     * @return       [description]
+     */
+    private static <E> void addMiddleIter(LinkedList<E> list, E value) {
+        int mid = list.size() / 2;
+        ListIterator<E> iter = list.listIterator();
+        int i = 0;
+        // go to the element at mid index
+        while (iter.hasNext() && i < mid) {
+            iter.next();
+            i++;
+        }
+        iter.next(); // Insert before mid + 1
+        iter.add(value);
+    }
+
+    private static <E> void addNEMiddle(ArrayList<E> array, int Nelements) {
+        ListIterator<E> iter = array.listIterator();
+        int i = 0;
+        // go to the element at the middle index
+        while (iter.hasNext() && i < array.size() / 2) {
+            iter.next();
+            i++;
+        }
+        iter.next(); // Insert before mid + 1
+        for (int j = 0; j < Nelements; j++) {
+            iter.add((E)new Object());
+        }
+    }
+
+    private static <E> void addNEMiddle(LinkedList<E> list, int Nelements) {
+        ListIterator<E> iter = list.listIterator();
+        int i = 0;
+        // go to the element at the middle index
+        while (iter.hasNext() && i < list.size() / 2) {
+            iter.next();
+            i++;
+        }
+        iter.next(); // Insert before mid + 1
+        for (int j = 0; j < Nelements; j++) {
+            iter.add((E)new Object());
+        }
+    }
+
+    /**
+     * The main() function
+     * @param String[] args main() function arguments array
+     */
+    public static void main(String[] args) {
+        ArrayList<Integer> array = new ArrayList<Integer>();
+        LinkedList<Integer> list = new LinkedList<Integer>();
+
+        for (int i = 0; i < 1000000; i++) {
+            array.add(i);
+            list.add(i);
+        }
+
+        long startTime = System.nanoTime();
+        //for (int i = 0; i < 100000; i++) {
+        //    addMiddleIter(array, i);
+        //}
+        addNEMiddle(array, 100000);
+        long stopTime = System.nanoTime();
+        long execTime = stopTime - startTime;
+        //System.out.println("Insert time in the middle of the ArrayList: " + TimeUnit.NANOSECONDS.toSeconds(execTime) + " s");
+        System.out.println("Insert time in the middle of the ArrayList: " + execTime + " ns");
+
+        startTime = System.nanoTime();
+        //for (int i = 0; i < 100000; i++) {
+        //    addMiddleIter(list, i);
+        //}
+        addNEMiddle(list, 100000);
+        stopTime = System.nanoTime();
+        execTime = stopTime - startTime;
+        //System.out.println("Insert time in the middle of the LinkedList: " + TimeUnit.NANOSECONDS.toSeconds(execTime) + " s");
+        System.out.println("Insert time in the middle of the LinkedList: " + execTime + " ns");
+    }
+}