Сообщение Re[9]: Ситуация на рынке труда в Питере от 27.01.2016 10:07
Изменено 27.01.2016 10:18 sadpotato
Здравствуйте, TMU_1, Вы писали:
>>ну и несут всякую ахинею что LinkedList занимает меньше памяти чем ArrayList,
TMU>Я, я знаю, чем они отличаются!
TMU>Кстати, на практике часто бывают ситуации, что один перед другим (или другой перед одним) имеют явное, то есть заметное преимущество?
TMU>А то регулярно слышу: пользуй ArrayList и не заморачивайся.
На практике зависит. Все что написано ниже относится только к использованию в режиме read-only.
При сильно фрагментированном хипе элементы LinkedList могут быть расположены далеко друг от друга, в таком случае при последовательном проходе по списку префетчи в кэш будут грузить всякий мусор, и каждый следующий элемент будет доставаться из основной памяти. Хотя я не уверен, что компилятор вообще будет генерировать префетчи для LinkedList. Вдобавок LinkedList в Java — doubly linked, так что на каждый элемент дополнительно надо хранить 2 ссылки. Если у тебя объекты маленького размера, то разница в использовании памяти по сравнению с ArrayList будет ощутима...
У ArrayList в read-only режиме один недостаток — непредсказуемое в теории время добавления нового элемента в конец списка (засчет периодических удвоений). Реально же порядок максимального количества элементов обычно известен заранее, так что для гарантированного O(1) для add нужно всего лишь не жлобить память.
Еще кстати ArrayList в отличие от LinkedList реализует java.util.RandomAccess, что подразумевает некоторые оптимизации при использовании Collections.sort (см. доку)
>>ну и несут всякую ахинею что LinkedList занимает меньше памяти чем ArrayList,
TMU>Я, я знаю, чем они отличаются!
TMU>Кстати, на практике часто бывают ситуации, что один перед другим (или другой перед одним) имеют явное, то есть заметное преимущество?
TMU>А то регулярно слышу: пользуй ArrayList и не заморачивайся.
На практике зависит. Все что написано ниже относится только к использованию в режиме read-only.
При сильно фрагментированном хипе элементы LinkedList могут быть расположены далеко друг от друга, в таком случае при последовательном проходе по списку префетчи в кэш будут грузить всякий мусор, и каждый следующий элемент будет доставаться из основной памяти. Хотя я не уверен, что компилятор вообще будет генерировать префетчи для LinkedList. Вдобавок LinkedList в Java — doubly linked, так что на каждый элемент дополнительно надо хранить 2 ссылки. Если у тебя объекты маленького размера, то разница в использовании памяти по сравнению с ArrayList будет ощутима...
У ArrayList в read-only режиме один недостаток — непредсказуемое в теории время добавления нового элемента в конец списка (засчет периодических удвоений). Реально же порядок максимального количества элементов обычно известен заранее, так что для гарантированного O(1) для add нужно всего лишь не жлобить память.
Еще кстати ArrayList в отличие от LinkedList реализует java.util.RandomAccess, что подразумевает некоторые оптимизации при использовании Collections.sort (см. доку)
Здравствуйте, TMU_1, Вы писали:
>>ну и несут всякую ахинею что LinkedList занимает меньше памяти чем ArrayList,
TMU>Я, я знаю, чем они отличаются!
TMU>Кстати, на практике часто бывают ситуации, что один перед другим (или другой перед одним) имеют явное, то есть заметное преимущество?
TMU>А то регулярно слышу: пользуй ArrayList и не заморачивайся.
На практике зависит. Все что написано ниже относится только к использованию в режиме read-only.
При сильно фрагментированном хипе элементы LinkedList могут быть расположены далеко друг от друга, в таком случае при последовательном проходе по списку префетчи в кэш будут грузить всякий мусор, и каждый следующий элемент будет доставаться из основной памяти. Хотя я не уверен, что JVM/компилятор вообще будет генерировать префетчи для LinkedList. Вдобавок LinkedList в Java — doubly linked, так что на каждый элемент дополнительно надо хранить 2 ссылки. Если у тебя объекты маленького размера, то разница в использовании памяти по сравнению с ArrayList будет ощутима...
У ArrayList в read-only режиме один недостаток — непредсказуемое в теории время добавления нового элемента в конец списка (засчет периодических удвоений). Реально же порядок максимального количества элементов обычно известен заранее, так что для гарантированного O(1) для add нужно всего лишь не жлобить память.
Еще кстати ArrayList в отличие от LinkedList реализует java.util.RandomAccess, что подразумевает некоторые оптимизации при использовании Collections.sort (см. доку)
>>ну и несут всякую ахинею что LinkedList занимает меньше памяти чем ArrayList,
TMU>Я, я знаю, чем они отличаются!
TMU>Кстати, на практике часто бывают ситуации, что один перед другим (или другой перед одним) имеют явное, то есть заметное преимущество?
TMU>А то регулярно слышу: пользуй ArrayList и не заморачивайся.
На практике зависит. Все что написано ниже относится только к использованию в режиме read-only.
При сильно фрагментированном хипе элементы LinkedList могут быть расположены далеко друг от друга, в таком случае при последовательном проходе по списку префетчи в кэш будут грузить всякий мусор, и каждый следующий элемент будет доставаться из основной памяти. Хотя я не уверен, что JVM/компилятор вообще будет генерировать префетчи для LinkedList. Вдобавок LinkedList в Java — doubly linked, так что на каждый элемент дополнительно надо хранить 2 ссылки. Если у тебя объекты маленького размера, то разница в использовании памяти по сравнению с ArrayList будет ощутима...
У ArrayList в read-only режиме один недостаток — непредсказуемое в теории время добавления нового элемента в конец списка (засчет периодических удвоений). Реально же порядок максимального количества элементов обычно известен заранее, так что для гарантированного O(1) для add нужно всего лишь не жлобить память.
Еще кстати ArrayList в отличие от LinkedList реализует java.util.RandomAccess, что подразумевает некоторые оптимизации при использовании Collections.sort (см. доку)