Как стать автором
Обновить

Шпаргалки Java программиста 9: Java SE — Шпаргалка для собеседований и повторений

Время на прочтение 32 мин
Количество просмотров 134K
Всего голосов 30: ↑28 и ↓2 +26
Комментарии 10

Комментарии 10

спасибо, все удобно структурировано
Спасибо вам! Не далее чем пару месяцев назад устраивался на джуниора, конспектировал в тетради ваши заметки. Помогло, и таки да, устроился.

Вы как-то обмолвились, что LinkedList занимает в 6 раз больше, чем ArrayList.


Я прикинул — в ArrayList на один элемент приходится 1 указатель на объект, то есть 8 байт. В LinkedList — указатель на объект — 8 байт, указатель на следующую ноду — 8 байт, указатель на предыдущую ноду — 8 байт, оверхед на объект с нодой — 16 байт.


То есть получается на 1 объект в ArrayList — 8 байт, а на объект в LinkedList — 40 байт. Разница получается в 5 раз. Что я упустил?

Зависит от размера указателя и размера объектов, дело в том что в Java есть такая функция как Compressed Oops, в этом случае и в случае 32 битных систем, указатели занимают только 4 байта, соотвественно объект будет более «тяжелым» по отношению к указателям.
Но тут сильно будет зависит от платформы, версии Java и много другого, в принципе размер объекта точно в стандарте (насколько я знаю) не определен, соотвественно в зависимости от системы может занимать как 16 байт. так и больше (или меньше). В целом, разница будет в 5 — 6 раз (а иногда и больше), 100% точно ответить на этот вопрос нельзя, так размер указателя в Java и размер объектов величины не постоянные.
Поэтому где я писал про размер, я делал оговорку про системы где указатели 4 байтные (из-за 32 битной системы или Compressed Oops).
Огромное Вам спасибо! Очень удобно и информативно.
Мне всегда казалось, что основным отличием массива(ArrayList) от связанного списка(LinkedList) является алгоритм расположения элементов в памяти. Так для массива элементы идут последовательно, для связанных списков элементы могут размещаться где угодно в памяти. Эти особенности и определяют сценарии использования. Так для чтения элементов по индексу лучше подойдет массив, если в коллекции преобладают операции вставки — связанный список. Стоимость алгоритмов следующая: чтение — массив О(1) против список O(n); вставка — массив О(n) против список O(1); Так что LinkedList бывает полезен не так уж редко.
>> Так что LinkedList бывает полезен не так уж редко.
на самом деле, по моему мнению он вообще практически никогда не нужен. Если не будет лень и будет время, я напишу статью. Посмотрите комментарии к моей статье про коллекции, там это обсуждалось.
Небольшой лайфхак — если вы хотите сразу развернуть все спойлеры на странице Хабра,
введите в адресной строке браузера следующий код

 javascript: { Array.prototype.slice.call(document.getElementsByClassName('spoiler_text')).forEach(function(e){e.style.display="block";}); }


Внимание — при копировании этой строки и вставке префикс javascript: часто проглатывается, не забудьте ввести его вручную.

Причины, которые побудили меня на такой ход — мне надо сохранить статью в скрэпбук, а прокликивать все сорок один спойлер довольно утомительно, да и не к лицу кодеру заниматься ручным трудом
Спасибо огромное!
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории