Назад Зміст Вперед

4.2. Клас Arrays

Колекції можуть бути реалізовані різними способами і немає єдиного - правильного. При одному підході одні операції є швидкими, а інші повільними, при іншому - все навпаки. Тому було вирішено зробити кілька реалізацій однієї і тієї ж колекції. І кожна реалізація була оптимізована для якогось вузького набору операцій. Так з'явилися різні колекції. 
Розглянемо це на прикладі двох класів - ArrayList і LinkedList.


ArrayList реалізований всередині у вигляді звичайного масиву. Тому при вставці елементу в середину, доводитися спочатку зсувати на один всі елементи після нього, а вже потім в місце, що звільнилося вставляти новий елемент. Зате в ньому швидко реалізовані взяття і зміна елемента - операції get, set, так як в них ми просто звертаємося до відповідного елементу масиву.

LinkedList реалізований всередині по-іншому. Він реалізований у вигляді зв'язного списку: набору окремих елементів, кожен з яких зберігає посилання на наступний і попередній елементи. Щоб вставити елемент в середину такого списку, досить поміняти посилання його майбутніх сусідів. А от щоб отримати елемент з номером 130, потрібно пройтися послідовно по всіх об'єктах від 0 до 130. Іншими словами операції set і get тут реалізовані дуже повільно. 


Опис
Операція
ArrayList
LinkedList
взяття елемента
get
швидко
повільно
Присвоєння елементу
set
швидко
повільно
Додавання елемента
add
швидко
швидко
вставка елемента
add (i, value)
повільно
швидко
видалення елемента
remove
повільно
швидко

Якщо треба вставляти (або видаляти) всередину колекції багато елементів, то краще використовувати LinkedList. У всіх інших випадках - ArrayList.


.