Народ, да прекратите же. Вот сейчас сложно искать, хочу отдохнуть. Но если захотите, то найду пруф линки. Итак:
Как раз таки ArrayList сделан именно по такому принципу.
Да. Это массив. Но не по этому принципу. Чуть ниже поясню.
Насколько я знаю, массив физически представляет собой определенный участок оперативной памяти, допустим 100 "ячеек" и они идут всегда подряд. Поэтому массив создается всегда четкого размера. Данные достаются очень быстро, потому что значение достается сразу из нужной ячейки памяти.
В случае же с ArrayList'ом эти ячейки идут не попорядку, и в каждой ячейке находится значение + ссылка на следующую ячейку.
не правильно. Это именно массив и идут они как раз таки как массив, вдоль, по памяти. Есть даже забугровая статья, где приводится пример, где таким образом можно получить еще более быстрый доступ к данным, именно потому что они идут по порядку. Он работает медленнее, потому что объект большим функционалом. Это очевидно, что будет медленнее, но практически незаметно.
ArrayList - это массив, который по умолчанию создает пустой массив в 10 элементов. Можно создать и больше, если в конструкторе указать кол-во элементов. И дальше он заполняетяс как вы хотите. Просто другие ячейки равны null. А если вы добавите 11 элемент, то произойдет то, что указано в первом посту, но прибавится не 1 элемент, а вроде как еще 10 пустых элементов. Или там какая-то другая хитрая формула. В итоге
советуют предугадывать размер ArrayList, что бы он как раз вот то, что в первом посту, не делал.
LinkedList - вот он работает по принципу двусвязного списка, где есть голова.
Согласен, это зло для такого объема данных , для них нужно использовать List.
Это список, который является интерфейсом, а вот LinkedList и ArrayList как раз таки его реализация.
При маленьких массивах, когда тебе именно в тип Array необходимо добавить 1-2 элемента, это идеально.
Это совсем не идеально. Я сейчас покажу.
есть массив с элементами 1 2 3 4 5 6 7 8 9 10.
Добавим еще 5 элементов. Будет это выглядеть так:
первый шаг
1 2 3 4 5 6 7 8 9 10 + 1 2 3 4 5 6 7 8 9 10 11
второй шаг
1 2 3 4 5 6 7 8 9 10 + 1 2 3 4 5 6 7 8 9 10 11 + 1 2 3 4 5 6 7 8 9 10 11 12
третий шаг
1 2 3 4 5 6 7 8 9 10 + 1 2 3 4 5 6 7 8 9 10 11 + 1 2 3 4 5 6 7 8 9 10 11 12 + 1 2 3 4 5 6 7 8 9 10 11 12 13
ну вы поняли.
Garbage Collector повесится вскоре. Знаете как это называется ? Конкатенация. И совершенно полностью напоминает складывание строк (String), где это делать нельзя в цикле. Там будет так
абс + д = абс + абсд
В помощь в строках приходят StringBuilder и StringBuffer
А в массивах, именно коллекции
первый шаг (вот был массив на 11, надо вставить еще 5)
1 2 3 4 5 6 7 8 9 10 + 1 2 3 4 5 6 7 8 9 10 11
второй шаг
1 2 3 4 5 6 7 8 9 10 + 1 2 3 4 5 6 7 8 9 10 11 12
третий шаг
1 2 3 4 5 6 7 8 9 10 + 1 2 3 4 5 6 7 8 9 10 11 12 13
четвертый шаг
1 2 3 4 5 6 7 8 9 10 + 1 2 3 4 5 6 7 8 9 10 11 12 13 14
ну вы поняли. А если размер отгадаем, то вообще красота.
хочу обратить ваше внимание, что эта тема находится в наработках и полезностях. Метод универсальный, для работы с обычными массивами!
Тогда назовите о наработках и вредностях, ибо это никак не полезность.
Так что прошу вас оставить критику формата перфекционизма и оптимизаторов процессорного времени (все мы такие ) и говорить по существу, приводя свои функции для решения задачи с обычными массивами.
Учите мат часть, я вас умоляю.
Для тех, кто не в танке и хочет разобраться в вещи, без которой в Java просто нереально, даю пруф линки на материал, по возрастанию сложности.
Java собеседование. Коллекции
http://habrahabr.ru/post/162017/
Структуры данных в картинках. ArrayList
http://habrahabr.ru/post/128269/
Структуры данных в картинках. LinkedList
http://habrahabr.ru/post/127864/
Еще комментарии прошу почитать, там тоже много интересного.