„Какво ще кажеш за малко тренировка за мозъка ти? Надявам се, че все още е в изправност.“
„По-рано в tableта с контейнери и колекции видяхте, че един и същ интерфейс може да има множество реализации. Сега ще ви кажа защо имаме нужда от това. И How ArrayList се различава от LinkedList .“
„Работата е там, че колекциите могат да бъдат реализирани по различни начини и никоя реализация не винаги е идеална. При един подход някои операции са бързи, но други са бавни. Обратното може да е вярно за друг подход. Няма перфектен едноразмерен подходящо за всички решение."
„Ето защо беше взето решението да се внедрят няколко версии на една и съща колекция. Всяка реализация трябва да бъде оптимизирана за няHowъв тесен набор от операции. Ето How се появиха различните колекции. Нека да проучим два класа като примери: ArrayList и LinkedList .“
„Вътрешно, ArrayList се реализира като обикновен масив . Ето защо вмъкването на елемент в средата изисква първо да изместим всички следващи елементи с един и след това да поставим новия елемент в свободния слот. Получаване и настройка на елементи (get, set ) е бързо , тъй като тези операции просто addressират съответния елемент от масива."
" LinkedList има различна вътрешна структура. Той е реализиран като списък с взаимосвързани елементи : набор от отделни елементи, всеки от които съхранява препратки към следващите и предишните елементи в списъка. За да вмъкнете елемент в средата на такъв списък, трябва само да промените референциите на бъдещите му съседи. Въпреки това, за да получите елемент № 130, трябва да преминете през всеки обект от 0 до 130. С други думи, операциите get и set ще бъдат бавни . Вижте следната table :"
Описание | Операция | ArrayList | LinkedList |
---|---|---|---|
Вземете елемент | получавам | Бърз | Бавен |
Задайте елемент | комплект | Бърз | Бавен |
Добавете елемент (в края на списъка) | добавете | Бърз | Бърз |
Вмъкване на елемент (на произволна позиция) | добавяне (i, стойност) | Бавен | Бърз |
Премахване на елемент | Премахване | Бавен | Бърз |
„Разбирам. Сега започвам да го разбирам. Има ли критерии or правила, които биха ми помогнали да разбера коя колекция е най-добра в определена ситуация?“
„За да го опростя, ще ви дам следното правило: ако често ще вмъквате (or премахвате) елементи в средата на колекцията, по-добре е да използвате LinkedList. Във всички останали случаи ArrayList работи по - добре . “
„Ще се задълбочим в това How са структурирани в по-напреднали уроци, но засега просто ще се упражняваме да ги използваме.“
GO TO FULL VERSION