Last updated
Last updated
Хранилища за данни
Основни операции
добавяне
триене
търсене
обхождане
Arrays дефинира методи за работа с масиви
Arrays.fill - метод за запълване на масиви е една стойност Arrays.sort - метод за сортиране на масиви Arrays.toString - метод за текстово представяне на масиви
Java предоставя т.нар. collections framework, съдържащ интерфейси, имплементации и алгоритми върху най-използваните структури от данни
За разлика от масивите,
размерът им е динамичен
съдържат само референтни типове
Почти всички интерфейси и класове се намират в пакета java.util
Итераторите предоставят унифициран начин за обхождане на елементите на дадена колекция.
Колекциите (както и масивите) могат да се обхождат с foreach loop
В java са дефинирани интерфейсите поведението на който се имплементира от всички колекции.
Метода next() връща следващия елемент в колекцията
Методът remove() премахва от колекцията елемента, последно върнат от next()
Ако колекцията бъде модифицирана докато бъде итерирана, по какъвто и да е начин, различен от извикване на remove() на итератора, поведението на итератора е недефинирано води до грешка (ConcurrentModificationException)
Масиви
Свързани списъци
Хеш таблици
Дървета
Collection е интерфейс, за всички колекции който го имплементират могат да се използват методите:
Пример
List е интерфейс, за всички колекции който го имплементират могат да се използват методите:
ArrayList - resize-ващ се (динамичен) масив
LinkedList - двойно свързан списък
Vector - resize-ващ се (динамичен) масив. Synchronized. Legacy
Stack - наследява Vector. Legacy -> замества се от Dequeue
Queue е интерфейс, за всички колекции който го имплементират могат да се използват методите:
PriorityQueue - heap (пирамида)
LinkedList
ArrayDeque - resize-ващ се (динамичен) масив
Set е интерфейс, за всички колекции който го имплементират могат да се използват методите:
TreeSet - TreeMap. Червено-черно дърво
конструктори
HashSet - хеш таблица
конструктори
LinkedHashSet - хеш таблица + свързан списък
EnumSet - битов масив
TreeMap/TreeSet - червено-черни дървета. Запазват естествена наредба. Елементите трябва да имплементират интерфейса Comparable (или да се подава имплементация на Comparator). Логаритмична сложност за повечето операции
HashMap/HashSet - хеш таблици. Нямат естествена наредба. Елементите трябва да имплементират методите hashCode() и equals(). Константна сложност за повечето операци
Всички ипове колекции имат Generic еквивалент което позволява използването на предефинираните алгоритми върху колекции с програмно дефинирани обекти.
За да могат да бъдат използвани е необходимо дефиниране на:
интерфейса Comparable
метода hashCode()
метода equals()
Класа Collections съържа функции за сортиране на колекции.
Функцията Collections.sort приема като входен параметър функцията която трябва да се сортира.
Критерия по който ще се сортира колекцията се подава като втори параметър посредством обект от клас имплементиращ интерфейса Comparator.
Пример
Метода compare служи за сравнение на два обекта от колекцията. Той връща като резултат
-1 ако левия обект е по малък
0 ако двата обекта са равни
1 ако деснич обект е по малък
пределно прост "интерфейс"
добавянето или изтриването на елемент (с изключение на последна позиция) е скъпа операция
най-ефективни от гледна точка на използвана памет*
размерът им е фиксиран при инициализацията
бърз достъп на елемент по индекс: O(1)
търсенето на елемент по стойност е бавно: О(N) за произволен масив O(logN) за сортиран масив