|
|
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Решил наглядно проверить производительность LinkedList и ArrayList и столкнулся с странным поведением. 1. По-идее вставка в конец линкедлиста должна быть всегда быстрее, ведь мы не тратим время на увеличиние размера внутреннего массива 2. По тем же самым соображениям вставка в любое другое место линкед листа так же должна быть быстрее Время в наносекундах, вставка 100000 элементов. Add to end: AL: 8723989 LL: 10759764 Insert: AL: 2397568565 LL: 7617189267 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:05:32 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Собственно вопрос - почему так происходит? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:06:16 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Ну так на вставку ArrayList делает только реаллокацию(если надо) и добавление в массив. А LinkedList создает контейнер с линками и устанавливает связи. В случае вставки же ArrayList вынужден перемещать кусок массива, что явно накладнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:13:38 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
sharmanka1. По-идее вставка в конец линкедлиста должна быть всегда быстрее, ведь мы не тратим время на увеличиние размера внутреннего массива Добавление в конец ArrayList далеко не всегда увеличивает размер массива. Соответсвенно и работает быстрее чем LinkedList. sharmanka2. По тем же самым соображениям вставка в любое другое место линкед листа так же должна быть быстрее Зависит от многих факторов. Копирование блока массива это тоже очень дешевая операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:13:46 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Во втором случае кстати вы мотаете лист в середину - это самая сложная операция для LinkedList ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:17:10 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Вставка в LinkedList быстрее только из итератора, потому что итератору известен текущий узел и не надо перебирать с края списка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:18:33 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Да и то, в итератор вставлять то нельзя ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:22:47 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
ЛагманДа и то, в итератор вставлять то нельзя ) Можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:24:02 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Вставка в голову, или в какое-то другое фиксированое место списка, действительно немного быстрее у LinkedList. Но это не даёт никакой выгоды от его использования, так как все другие операции с ним проигрывают в производительности намного сильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 20:26:11 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczЛагманДа и то, в итератор вставлять то нельзя ) Можно. Как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:19:39 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Переписал вставку листитератором. Результаты вставки в середину впечатляющее Add to end: AL: 7865178 LL: 9565968 Insert: AL: 2335386077 LL: 7783895 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:22:27 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Похоже все-такие не так с линкедлистом все плохо и прочитанное где-то утверждение, что в 99% он бесполезен, неверное. Всем спасибо за обсуждение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:24:28 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
ЛагманКак? Тока на прошлой неделе ведь обсуждали http://docs.oracle.com/javase/6/docs/api/java/util/ListIterator.html#add(E) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:25:54 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
sharmankaПохоже все-такие не так с линкедлистом все плохо и прочитанное где-то утверждение, что в 99% он бесполезен, неверное. Всем спасибо за обсуждение :) Ну, когда у вас будет жизненый пример полезного использования, тогда можно и обсудить. А так, написать синтетические тесты под заведомо выгодный только с одной стороны сценарий, много ума не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:28:31 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczЛагманКак? Тока на прошлой неделе ведь обсуждали http://docs.oracle.com/javase/6/docs/api/java/util/ListIterator.html#add(E) лол, а слона то я и не приметил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:34:34 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Интересно, кто-то вообще вопрос прочитал? Например, в какой-то момент включается инкрементальный JIT-компилятор. И у вас время исполнения - включает компиляцию. Много раз в статьях писали, что в жабе вот так напрямую нельзя мерять. Есть jmh, можно пытаться мерять им, но там тоже все далеко неоднозначно. Еще мне кажется, что добавление в ArrayList с его расширением может в итоге происходить через "realloc" если это возможно, а realloc может быть и не копирующим, если это получается... Кроме того, add добавляет в конец массива, а для ArrayList тяжелой операцией является добавление в начало. И для добавления в LinkedList по индексу нужно найти ноду с этим индексом, а тяжесть этой операции пропорциональна индексу. Поэтому вставка в середину по индексу - доророгая в среднем операция, гораздо дороже чем у ArrayList. Когда говорят про дешевую вставку всередину, то подразумевают вставку по итератору а не по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:36:23 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
sharmankaПереписал вставку листитератором. Результаты вставки в середину впечатляющее Ты еще попробуй с удалением из середины. например пробег итератором и вставку в начало. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:48:04 |
|
||
|
странное поведение LinkedList
|
|||
|---|---|---|---|
|
#18+
Много полезной инфы по ссылке http://stackoverflow.com/questions/322715/when-to-use-linkedlist-over-arraylist ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2013, 22:51:07 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38475008&tid=2128143]: |
0ms |
get settings: |
12ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
213ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 565ms |

| 0 / 0 |
