Я следил за предыдущим сообщением об этом:
Для LinkedList
- get is O (n)
 - add is O (1)
 - remove - O (n)
 - Iterator.remove - O (1)
 Для ArrayList
- get is O (1)
 - add - O (1) амортизируется, но O (n) наихудший, так как массив должен быть изменен и скопирован
 - remove - O (n)
 
Итак, посмотрев на это, я пришел к выводу, что если мне нужно сделать только последовательную вставку в моей коллекции за 5000000 элементов, LinkedList будет outclass ArrayList.
И если мне нужно просто извлечь элементы из коллекции, итерации, т.е. не захватив элемент посередине, все равно LinkedList будет превзойти `ArrayList.
Теперь, чтобы проверить мои предыдущие два утверждения, я написал ниже пример программы... Но я удивлен, что мои предыдущие утверждения оказались неверными.
 ArrayList outclassed LinkedList в обоих случаях. Для добавления, а также получения их из коллекции потребовалось меньше времени LinkedList. Есть ли что-то, что я делаю неправильно, или исходные утверждения о LinkedList и ArrayList недействительны для коллекций размером 5000000?
Я упомянул размер, потому что, если я уменьшу количество элементов до 50000, LinkedList будет работать лучше, и исходные операторы верны.
long nano1 = System.nanoTime();
List<Integer> arr = new ArrayList();
for(int i = 0; i < 5000000; ++i) {
    arr.add(i);
}
System.out.println( (System.nanoTime() - nano1) );
for(int j : arr) {
    ;
}
System.out.println( (System.nanoTime() - nano1) );
long nano2 = System.nanoTime();
List<Integer> arrL = new LinkedList();
for(int i = 0; i < 5000000; ++i) {
    arrL.add(i);
}
System.out.println( (System.nanoTime() - nano2) );
for(int j : arrL) {
    ;
}
System.out.println( (System.nanoTime() - nano2) );