это довольно быстро.
довал запредыдущий пост на это что говорит:
Для LinkedList
получить это O (N)добавить O (1)удалить это O (n)Iterator.remove - это O (1)Для ArrayList
получить это O (1)add это O (1) амортизируется, но O (n) худший случай, так как размер массива должен быть изменен и скопированудалить это O (n)Поэтому, посмотрев на это, я пришел к выводу, что, если мне нужно сделать просто последовательную вставку в мою коллекцию, скажем, для 5000000 элементов,LinkedList
будет превосходитьArrayList
.
И если мне нужно просто извлечь элементы из коллекции, выполнив итерацию, т.е. не захватывая элемент посередине, все равноLinkedList
превзойдет ArrayList.
Теперь, чтобы проверить мои вышеупомянутые два утверждения, я написал ниже пример программы… Но я удивлен, что мои вышеупомянутые утверждения оказались неверными.
ArrayList
превосходил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) );