Въведение
Почти всяка програма трябва да съхранява няHowъв набор от данни. Може да са низове и числа, обекти и т.н. Масивите са превъзходно решение за съхранение. Но масивите имат определени ограничения. Например размерът им е фиксиран, елементите не могат да се премахват и не можете да вмъквате елементи в средата. Колекциите са създадени, за да се заобиколят тези и други ограничения. Всички типове колекции (и има много от тях, Howто ще видим по-късно в този урок) имат способността да се преоразмеряват динамично. Някои типове колекции могат да съхраняват подредени елементи и автоматично да подреждат нови елементи, когато се добавят.
В този урок ще се запознаем с йерархията на класовете на базовите колекции в Java Collections Framework . Има и различни алтернативни библиотеки, които разширяват възможностите на стандартната Java Collections Framework . Най-популярният от тях е Guava (Google Collections Library).
Основни интерфейси
Диаграмата показва, че има два основни интерфейса, които са внедрени, за да формират останалите класове и интерфейси.
Нека да разгледаме тези интерфейси:
-
Колекция — обикновена колекция, която съдържа набор от елементи (обекти). Тази колекция има основни методи за работа с елементи: вмъкване ( добавяне , добавяне на всички ), премахване ( премахване , премахване на всички , изчистване ), търсене ( съдържа , съдържа всички ), проверка дали колекцията е празна ( isEmpty ) и получаване на размер ( размер ).
-
Карта — колекция, структурирана като двойки ключ-стойност. Освен това всеки ключ в картата е уникален: няма два ключа с еднакви стойности. Тази колекция понякога се нарича речник . Картата е отделен интерфейс. Той не реализира интерфейса на колекцията , но е част от рамката на колекциите на 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 :
-
HashMap е реализация на Map , която се основава на хеш таблици. Може да съхранява ключове и стойности от всяHowъв тип, включително null . Редът на елементите не е гарантиран.
-
LinkedHashMap е структура от данни, която съхранява данни като свързан списък от елементи. Елементите се показват в списъка в реда, в който са добавени.
-
TreeMap имплементира интерфейса SortedMap (чрез интерфейса NavigableMap ). Елементите в тази структура се съхраняват в сортиран ред (когато се добави нов елемент, колекцията се сортира автоматично). TreeMap е страхотен за съхраняване на големи количества сортирани данни с бързо извличане.
Остарели колекции:
Java има остарели колекции от предишни версии (за да се поддържа обратна съвместимост). Тези стари колекции не трябва да се използват в нов code:
-
Изброяване — аналогично на интерфейса на Iterator ;
-
Vector — подреден списък от елементи и аналогичен на класа ArrayList ;
-
Стек — реализация на структурата на стека от данни, която съхранява и манипулира елементи като това How бихте взаимодействали с купчина книги. Има методи за добавяне на елементи към стека ( push ) и премахването им ( pop );
-
Речник — аналогичен на интерфейса Map , но е абстрактен клас;
-
Hashtable — аналогично на HashMap .
Можете да прочетете повече за Collections Framework в тази статия .
GO TO FULL VERSION