Коллекции
При разработке программ нам часто приходится работать с множествами.
И мы уже обсуждали этот вопрос в теме Массивы, однако, количество элементов которое можно хранить в массиве - фиксированное.
Например:Из примера видно, что на момент создания массив имеет длину 3 и записать ещё один элемент не получится, мы получаем ошибку.
Какой можно найти выход из ситуации?
Давайте попробуем реализовать класс для создания массива, в который можно будет добавлять произвольное количество элементов!
Будем использовать следующие идеи:-
Внутренний массив: Используем обычный массив для хранения элементов.
-
Изменение размера: При заполнении массива создаем новый массив большего размера и копируем в него все элементы.
-
Методы:
-
add()
— добавление элемента. -
get()
— получение элемента по индексу. -
remove()
— удаление элемента по индексу. -
size()
— получение текущего размера массива. -
resize()
— увеличение размера внутреннего массива.
-
-
Внутренний массив (
array
):-
Используется для хранения элементов.
-
Изначально создается с фиксированной емкостью (по умолчанию 10).
-
-
Метод
add(int element)
:-
Добавляет элемент в конец массива.
-
Если массив заполнен, вызывается метод
resize()
, который увеличивает его размер.
-
-
Метод
resize()
:-
Создает новый массив с удвоенной емкостью.
-
Копирует все элементы из старого массива в новый.
-
-
Метод
get(int index)
:-
Возвращает элемент по указанному индексу.
-
Если индекс выходит за пределы массива, выбрасывается исключение
IndexOutOfBoundsException
.
-
-
Метод
remove(int index)
:-
Удаляет элемент по указанному индексу.
-
Все последующие элементы сдвигаются влево.
-
-
Метод
size()
:-
Возвращает текущее количество элементов в массиве.
-
-
Метод
toString()
:-
Переопределен для удобного вывода массива в виде строки.
-
СЛОЖНААА!!! - не так ли?
Если данный подход показался громоздким и сложным, то так оно и есть.
На самом деле, задача создания динамических массивов встречается невероятно часто.
Несколько примеров:- Вывод списка товаров из базы данных (их кол-во мы можем не знать заранее).
- Сохранение списка элементов при парсинге сайтов.
- и другие случаи, когда мы не можем заранее знать кол-во элементов.
Ну и раз эта задача встречается часто, значит наверняка уже имеются красивые и изящные решения!
Коллекции
Коллекции — это структуры данных, которые позволяют хранить и обрабатывать группы объектов.
В Java коллекции представлены в виде набора интерфейсов и классов, которые находятся в пакете java.util
.
Коллекции упрощают работу с данными, предоставляя готовые реализации для хранения, поиска, сортировки и обработки элементов. В Java существует множество коллекций, но все они образуют стройную и логичную систему.
Иерархия коллекций
Иерархия коллекций в Java строится на основе нескольких ключевых интерфейсов:

Описание интерфейсов и классов
Interface:
-
Collection
:-
Базовый интерфейс для всех коллекций.
-
Основные методы:
add()
,remove()
,size()
,isEmpty()
,contains()
.
-
-
List
:-
Упорядоченная коллекция, которая позволяет хранить дубликаты.
-
Основные реализации:
ArrayList
,LinkedList
,Vector
.
-
-
Set
:-
Коллекция, которая не позволяет хранить дубликаты.
-
Основные реализации:
HashSet
,LinkedHashSet
,TreeSet
.
-
-
Queue
:-
Коллекция, предназначенная для хранения элементов в порядке, который зависит от реализации (например, FIFO).
-
Основные реализации:
PriorityQueue
,ArrayDeque
.
-
-
Map
:-
Коллекция, которая хранит данные в виде пар "ключ-значение".
-
Основные реализации:
HashMap
,LinkedHashMap
,TreeMap
,Hashtable
.
-
Class:
-
ArrayList
:-
Динамический массив, который автоматически увеличивает свой размер.
-
Быстрый доступ по индексу, но медленные вставка и удаление в середине списка.
-
-
LinkedList
:-
Двусвязный список.
-
Быстрые вставка и удаление, но медленный доступ по индексу.
-
-
HashSet
:-
Хранит уникальные элементы без гарантии порядка.
-
Основан на хэш-таблицах.
-
-
TreeSet
:-
Хранит уникальные элементы в отсортированном порядке.
-
Основан на красно-черном дереве.
-
-
HashMap
:-
Хранит пары "ключ-значение".
-
Быстрый доступ по ключу.
-
-
TreeMap
:-
Хранит пары "ключ-значение" в отсортированном порядке по ключам.
-
Итак, мы познакомились с таким понятием, как коллекции. Теперь необходимо изучить методы, с помощью которых можно управлять коллекциями, и посмотреть на их практическое применение!
Об этом поговорим далее.