Коллекции
При разработке программ нам часто приходится работать с множествами.
И мы уже обсуждали этот вопрос в теме Массивы, однако, количество элементов которое можно хранить в массиве - фиксированное.
Например:Из примера видно, что на момент создания массив имеет длину 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:-
Хранит пары "ключ-значение" в отсортированном порядке по ключам.
-
Итак, мы познакомились с таким понятием, как коллекции. Теперь необходимо изучить методы, с помощью которых можно управлять коллекциями, и посмотреть на их практическое применение!
Об этом поговорим далее.