„Здрасти, Амиго!“

„Здравей, Ели!“

„Днес ще се замислим около структурата на колекциите веднъж завинаги.“

— Дълго време чаках това.

„Вече знаете Howво представляват колекциите и знаете How да работите с тях. Време е да организирате знанията си в строга система. Тогава много въпроси „защо“ и „How“ ще изчезнат и повечето неща ще станат очевидни.“

" Интерфейси за събиране . Структурата на наследяване на интерфейси за събиране изглежда по следния начин:"

Колекция интерфейси - 1

Забележете две неща.

Първо, всичко, което виждате тук, е интерфейс.

Второ, стрелките означават „наследява“.

„С други думи, List, Set и Queue наследяват Collection, но Map не?“

„Да. След това абстрактните класове наследяват тези интерфейси и на свой ред реализациите, за които знаете, наследяват тези абстрактни класове:  ArrayList, Hashtable, TreeSet,…

"Прав си."

„Сега нека видим за Howво служат методите на тези интерфейси:“

Методи на интерфейса Iterable<E> ::

Методи Описание
Iterator<T> iterator(); Връща обект на итератор.

— Това не изглежда достатъчно.

"Е, това е колко са. Това е всичко за итераторите. Няма да ги покрием точно сега, но скоро ще ги покрием подробно."

Методи на колекцията<E>: интерфейс:

Методи Описание
boolean add(E e); Добавя елемент към колекцията
boolean addAll(Collection<? extends E> c); Добавя елементи към колекцията
void clear(); Премахва всички елементи от колекцията
boolean contains(Object o); Проверява дали колекцията съдържа елемента.
boolean containsAll(Collection<?> c); Проверява дали колекцията съдържа елементите.
boolean equals(Object o); Проверява дали колекциите са еквивалентни
int hashCode(); Връща хеш codeа
boolean isEmpty(); Проверява дали колекцията е празна.
Iterator<E> iterator(); Връща обект на итератор
boolean remove(Object o); Премахва елемент от колекцията
boolean removeAll(Collection<?> c); Премахва елементи от колекцията
boolean retainAll(Collection<?> c); Премахва всички елементи извън c
int size(); Връща размера на колекцията
Object[] toArray(); Преобразува колекцията в масив
<T> T[] toArray(T[] a); Преобразува колекцията в масив

„Вече съм твърд във всичко тук. Използвал съм половината от тези методи и съм се сблъсквал с другата половина.“

— Чудесно, тогава да продължим.

Методи на  списъка<E>: интерфейс:

Методи Описание
void add(int index, E element); Добавя елементи към средата на колекцията
boolean addAll(int index, Collection<? extends E> c); Добавя елементи към колекцията
E get(int index); Връща елемент по индекс
int indexOf(Object o); Връща индекса (номера) на елемент
int lastIndexOf(Object o); Връща индекса на последния елемент.
ListIterator<E> listIterator(); Връща итератор за списъка
ListIterator<E> listIterator(int index); Връща итератор за списъка
E remove(int index); Премахва елемент по неговия индекс
E set(int index, E element); Задава нова стойност по индекс
List<E> subList(int fromIndex, int toIndex); Връща подколекция

"Тук също нищо радикално ново. Вече знам почти всичко за колекциите, което няма How да не ме радва."

„Е, мисля, че мога да намеря нещо, което ще ви изненада. Но нека продължим да изследваме интерфейсите:“

Методи на интерфейса Set<E> :

Методи Описание
Без методи

„Интерфейсът Set няма нови методи – само тези, които наследява.“

„Да, видях, че Interable интерфейсът също нямаше нищо.

„От друга страна, по-малко методи означава по-малко за запомняне!“

— Вашият жизнеутвърждаващ оптимизъм ме прави щастлив.

„Интерфейсът Set е наследен от два интерфейса с методи: SortedSet и NavigableSet. Но няма да ги разглеждам or никога няма да завършим.“

„Вместо това нека ви дам обща картина на класовете и интерфейсите, които описват колекциите в Java.“

— Донеси го.

„Тогава дръж се здраво:“

Интерфейси за събиране - 2

„Уау, това е огромно!“

„Е, не е толкова голям. Освен това не забравяйте, че абстрактните класове са напълно незадължителни. Но е добре да запомните кой клас кои интерфейси имплементира. Това може да бъде полезно доста често.“

„О, бих искал също да отбележа, че някои колекции се считат за остарели.“

"Кои са тези?"

"Говоря за класовете Vector, Stack, Dictionary и Hashtable. Това са синхронизирани (безопасни за нишки) версии на обикновени колекции."

„Но Java добави специална библиотека за едновременност с много колекции, които не само могат да бъдат достъпни от други нишки, но също така имат много по-ефективна реализация.  ConcurrentHashMap е много по-ефективен от Hashtable .“

„Можете да използвате колекциите Vector, Stack, Dictionary и Hashtable, но не се препоръчва.“

„Разбрах, ще го имам предвид.“

„Благодаря, Ели!“