Въведение

Почти всяка програма трябва да съхранява няHowъв набор от данни. Може да са низове и числа, обекти и т.н. Масивите са превъзходно решение за съхранение. Но масивите имат определени ограничения. Например размерът им е фиксиран, елементите не могат да се премахват и не можете да вмъквате елементи в средата. Колекциите са създадени, за да се заобиколят тези и други ограничения. Всички типове колекции (и има много от тях, Howто ще видим по-късно в този урок) имат способността да се преоразмеряват динамично. Някои типове колекции могат да съхраняват подредени елементи и автоматично да подреждат нови елементи, когато се добавят.

В този урок ще се запознаем с йерархията на класовете на базовите колекции в Java Collections Framework . Има и различни алтернативни библиотеки, които разширяват възможностите на стандартната Java Collections Framework . Най-популярният от тях е Guava (Google Collections Library).

*Не всички интерфейси и класове са представени в диаграмата. Някои бяха пропуснати за по-лесно разбиране.

Основни интерфейси

Диаграмата показва, че има два основни интерфейса, които са внедрени, за да формират останалите класове и интерфейси.

Нека да разгледаме тези интерфейси:

  1. Колекция — обикновена колекция, която съдържа набор от елементи (обекти). Тази колекция има основни методи за работа с елементи: вмъкване ( добавяне , добавяне на всички ), премахване ( премахване , премахване на всички , изчистване ), търсене ( съдържа , съдържа всички ), проверка дали колекцията е празна ( isEmpty ) и получаване на размер ( размер ).

  2. Карта — колекция, структурирана като двойки ключ-стойност. Освен това всеки ключ в картата е уникален: няма два ключа с еднакви стойности. Тази колекция понякога се нарича речник . Картата е отделен интерфейс. Той не реализира интерфейса на колекцията , но е част от рамката на колекциите на Java .

Полезни методи за работа с елементи в карта :

  • вмъкване ( поставяне , поставяне на всички )

  • get ( get , keySet , values , entrySet )

  • премахване ( премахване , изчистване )

  • търсене ( съдържа ключ , съдържа стойност )

  • проверете дали колекцията е празна ( isEmpty )

  • вземете размер ( размер )

Сега нека поговорим повече за всеки от тях.

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

Интерфейсът Collection разширява интерфейса Iterable , който има един метод: iterator() . За нас това означава, че всяка колекция, която наследява Iterable , ще може да върне итератор.

Итераторът е специален обект, който можете да използвате за достъп до елементите на всяка колекция, независимо от нейната конкретна реализация .

Фигурата показва, че 3 интерфейса наследяват интерфейса Collection : List , Queue и Set . Сега ще разгледаме накратко всеки от тях.

Списъкът е подредена колекция, която позволява дублирани стойности. Специфична характеристика на списъка е, че неговите елементи са номерирани и могат да бъдат достъпни чрез номер (индекс).

Опашката съхранява елементи в реда, в който са добавени към опашката.

За разлика от списъка, наборът представлява неподредена колекция, която не позволява повтарящи се елементи. Интерфейсът Set съответства на концепцията за математическо множество .

Реализации на интерфейса Map

Можем да видим, че интерфейсът Map представлява съпоставяне между уникални ключове и стойности.


interface Map<K, V>

където K е типът на ключовете, а V е типът на съхранените стойности.

С помощта на ключ можем да извлечем данни от карта . За да добавим елемент към Map , трябва да посочим ключ и стойност.

Нека да разгледаме някои реализации на Map :

  1. HashMap е реализация на Map , която се основава на хеш таблици. Може да съхранява ключове и стойности от всяHowъв тип, включително null . Редът на елементите не е гарантиран.

  2. LinkedHashMap е структура от данни, която съхранява данни като свързан списък от елементи. Елементите се показват в списъка в реда, в който са добавени.

  3. TreeMap имплементира интерфейса SortedMap (чрез интерфейса NavigableMap ). Елементите в тази структура се съхраняват в сортиран ред (когато се добави нов елемент, колекцията се сортира автоматично). TreeMap е страхотен за съхраняване на големи количества сортирани данни с бързо извличане.

Остарели колекции:

Java има остарели колекции от предишни версии (за да се поддържа обратна съвместимост). Тези стари колекции не трябва да се използват в нов code:

  • Изброяване — аналогично на интерфейса на Iterator ;

  • Vector — подреден списък от елементи и аналогичен на класа ArrayList ;

  • Стек — реализация на структурата на стека от данни, която съхранява и манипулира елементи като това How бихте взаимодействали с купчина книги. Има методи за добавяне на елементи към стека ( push ) и премахването им ( pop );

  • Речник — аналогичен на интерфейса Map , но е абстрактен клас;

  • Hashtable — аналогично на HashMap .

Можете да прочетете повече за Collections Framework в тази статия .