|
|
|
Скорость перебора элементов LinkedList методом get()
|
|||
|---|---|---|---|
|
#18+
Из лит-ры известно, что "перебор грибов" в LinkedList лучше не делать, если число элементов с списке достаточно велико. Есть вот такой код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. В нём я менял значения `m` от 10'000 до 80'000 с шагом 10'000 и получил следующую таблицу времени выполнения:mtime, ms1000034420000123430000289140000128915000027079600004307870000671258000090797 Видно, что после числа = 40 тыс действительно начинаются проблемы. В книге Хорстманна (ISBN 5-8459-1033-1 rus) объясняется, что метод get(n) будет делать перебор, начиная с 1-го элемента и до n, если n<=list.size() / 2, в противном случае начиная с list.size() вниз до n. Но по-любому будет перебор, начиная с границы. Почему тогда вот это: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. - отрабатывает мгновенно, какой бы числовой индекс я не задал ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 17:45:21 |
|
||
|
Скорость перебора элементов LinkedList методом get()
|
|||
|---|---|---|---|
|
#18+
Перебор в LinkedList чудесно делает через итератор. Проблемы только в доступе по случайному индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 17:53:21 |
|
||
|
Скорость перебора элементов LinkedList методом get()
|
|||
|---|---|---|---|
|
#18+
Ну как мгновенно. Пользуясь вашей табличкой, доступ осуществляется примерно за 90797/80000 = 1,13мс, такое время человеку действительно трудно заметить. А сделайте это 40000 раз в цикле и сравните с таким же циклом для ArrayList - и все станет понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 17:53:24 |
|
||
|
Скорость перебора элементов LinkedList методом get()
|
|||
|---|---|---|---|
|
#18+
ozzmosis, потому что цикл закомментирован ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 18:01:42 |
|
||
|
Скорость перебора элементов LinkedList методом get()
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПеребор в LinkedList чудесно делает через итератор. Проблемы только в доступе по случайному индексу.А еще вопрос. Если я создам объект LinkedList, затем сразу же - итератор к нему, то дальше я не могу добавлять к объекту LinkedList новые элементы: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. - вываливает: Код: plaintext 1. 2. 3. 4. В книге Хорстманна на стр. 135 сказано: авторпри изменениях списка<...> к набору следует подключать только один итератор, который помимо операций чтения может выполнять операции записи. ... Перед выполнением каждого метода итератора выполняется проверка равенства количества изменений данного итератора и общего количества изменений всего набора данных. Если равенство не соблюдается, то генерируется исключение ConcurrentModificationExceptionя правильно понимаю, что переменной итератора надо присваивать значение list.iterator() только после "окончательной утряски" списка, даже без всякой параллельной работы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2013, 18:17:44 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=237&tid=2129688]: |
0ms |
get settings: |
16ms |
get forum list: |
24ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
75ms |
get topic data: |
18ms |
get forum data: |
9ms |
get page messages: |
74ms |
get tp. blocked users: |
3ms |
| others: | 294ms |
| total: | 529ms |

| 0 / 0 |
