85d48b512ee127807662fae64d40d5a6bdbbd53f
[Project_POO.git] / exo2 / Main.java
1 import java.util.ArrayList;
2 import java.util.LinkedList;
3 import java.util.ListIterator;
4 import java.util.concurrent.TimeUnit;
5
6 class Main {
7
8 private static <E> void addMiddle(ArrayList<E> array, E value) {
9 int mid = array.size() / 2;
10 array.add(mid + 1, value);
11 }
12
13 private static <E> void addMiddle(LinkedList<E> list, E value) {
14 int mid = list.size() / 2;
15 list.add(mid + 1, value);
16 }
17
18 /**
19 * Should mimic the collection add(int index, T value) method
20 * @param array [description]
21 * @param value [description]
22 * @return [description]
23 */
24 private static <E> void addMiddleIter(ArrayList<E> array, E value) {
25 int mid = array.size() / 2;
26 ListIterator<E> iter = array.listIterator();
27 int i = 0;
28 // go to the element at mid index
29 while (iter.hasNext() && i < mid) {
30 iter.next();
31 i++;
32 }
33 iter.next(); // Insert before mid + 1
34 iter.add(value);
35
36 }
37
38 /**
39 * Should mimic the collection add(int index, T value) method
40 * @param list [description]
41 * @param value [description]
42 * @return [description]
43 */
44 private static <E> void addMiddleIter(LinkedList<E> list, E value) {
45 int mid = list.size() / 2;
46 ListIterator<E> iter = list.listIterator();
47 int i = 0;
48 // go to the element at mid index
49 while (iter.hasNext() && i < mid) {
50 iter.next();
51 i++;
52 }
53 iter.next(); // Insert before mid + 1
54 iter.add(value);
55 }
56
57 private static <E> void addNEMiddle(ArrayList<E> array, int Nelements) {
58 ListIterator<E> iter = array.listIterator();
59 int i = 0;
60 // go to the element at the middle index
61 while (iter.hasNext() && i < array.size() / 2) {
62 iter.next();
63 i++;
64 }
65 iter.next(); // Insert before mid + 1
66 for (int j = 0; j < Nelements; j++) {
67 iter.add((E)new Object());
68 }
69 }
70
71 private static <E> void addNEMiddle(LinkedList<E> list, int Nelements) {
72 ListIterator<E> iter = list.listIterator();
73 int i = 0;
74 // go to the element at the middle index
75 while (iter.hasNext() && i < list.size() / 2) {
76 iter.next();
77 i++;
78 }
79 iter.next(); // Insert before mid + 1
80 for (int j = 0; j < Nelements; j++) {
81 iter.add((E)new Object());
82 }
83 }
84
85 /**
86 * The main() function
87 * @param String[] args main() function arguments array
88 */
89 public static void main(String[] args) {
90 ArrayList<Integer> array = new ArrayList<Integer>();
91 LinkedList<Integer> list = new LinkedList<Integer>();
92
93 for (int i = 0; i < 1000000; i++) {
94 array.add(i);
95 list.add(i);
96 }
97
98 long startTime = System.nanoTime();
99 //for (int i = 0; i < 100000; i++) {
100 // addMiddleIter(array, i);
101 //}
102 addNEMiddle(array, 100000);
103 long stopTime = System.nanoTime();
104 long execTime = stopTime - startTime;
105 //System.out.println("Insert time in the middle of the ArrayList: " + TimeUnit.NANOSECONDS.toSeconds(execTime) + " s");
106 System.out.println("Insert time in the middle of the ArrayList: " + execTime + " ns");
107
108 startTime = System.nanoTime();
109 //for (int i = 0; i < 100000; i++) {
110 // addMiddleIter(list, i);
111 //}
112 addNEMiddle(list, 100000);
113 stopTime = System.nanoTime();
114 execTime = stopTime - startTime;
115 //System.out.println("Insert time in the middle of the LinkedList: " + TimeUnit.NANOSECONDS.toSeconds(execTime) + " s");
116 System.out.println("Insert time in the middle of the LinkedList: " + execTime + " ns");
117 }
118 }