„Какво ще кажеш за малко тренировка за мозъка ти? Надявам се, че все още е в изправност.“

„По-рано в tableта с контейнери и колекции видяхте, че един и същ интерфейс може да има множество реализации. Сега ще ви кажа защо имаме нужда от това. И How ArrayList се различава от LinkedList .“

„Работата е там, че колекциите могат да бъдат реализирани по различни начини и никоя реализация не винаги е идеална. При един подход някои операции са бързи, но други са бавни. Обратното може да е вярно за друг подход. Няма перфектен едноразмерен подходящо за всички решение."

„Ето защо беше взето решението да се внедрят няколко версии на една и съща колекция. Всяка реализация трябва да бъде оптимизирана за няHowъв тесен набор от операции. Ето How се появиха различните колекции. Нека да проучим два класа като примери: ArrayList и LinkedList .“

ArrayList срещу LinkedList - 1

„Вътрешно, ArrayList се реализира като обикновен масив . Ето защо вмъкването на елемент в средата изисква първо да изместим всички следващи елементи с един и след това да поставим новия елемент в свободния слот. Получаване и настройка на елементи (get, set ) е бързо , тъй като тези операции просто addressират съответния елемент от масива."

" LinkedList има различна вътрешна структура. Той е реализиран като списък с взаимосвързани елементи : набор от отделни елементи, всеки от които съхранява препратки към следващите и предишните елементи в списъка. За да вмъкнете елемент в средата на такъв списък, трябва само да промените референциите на бъдещите му съседи. Въпреки това, за да получите елемент № 130, трябва да преминете през всеки обект от 0 до 130. С други думи, операциите get и set ще бъдат бавни . Вижте следната table :"

Описание Операция ArrayList LinkedList
Вземете елемент получавам Бърз Бавен
Задайте елемент комплект Бърз Бавен
Добавете елемент (в края на списъка) добавете Бърз Бърз
Вмъкване на елемент (на произволна позиция) добавяне (i, стойност) Бавен Бърз
Премахване на елемент Премахване Бавен Бърз

„Разбирам. Сега започвам да го разбирам. Има ли критерии or правила, които биха ми помогнали да разбера коя колекция е най-добра в определена ситуация?“

„За да го опростя, ще ви дам следното правило: ако често ще вмъквате (or премахвате) елементи в средата на колекцията, по-добре е да използвате LinkedList. Във всички останали случаи ArrayList работи по - добре .

„Ще се задълбочим в това How са структурирани в по-напреднали уроци, но засега просто ще се упражняваме да ги използваме.“