
3 КОЛЛЕКЦИИ
3.1 Цель работы
Целью данной работы является приобретение навыков по работе с коллекциями, входящими в состав пакета java.util.
3.2 Организация самостоятельной работы
В процессе подготовки необходимо изучить теоретический материал по конспекту лекций: тема «Коллекции», а также API-документацию по пакету java.util, которая входит в состав JDK.
3.2.1 Коллекции
Коллекции – это очень мощный и исключительно полезный механизм. Простейшей коллекцией является массив. Но массив имеет ряд недостатков. Один из самых существенных – размер массива фиксируется до начала его использования. Т.е. мы должны заранее знать или подсчитать, сколько нам потребуется элементов коллекции до начала работы с ней. Зачастую это неудобно, а в некоторых случаях – невозможно.
Поэтому все современные базовые библиотеки различных языков программирования имеют тот или иной вариант поддержки коллекций объектов. Коллекции обладают одним важным свойством – их размер не ограничен. Выделение необходимых для коллекции ресурсов спрятано внутри соответствующего класса. Работа с коллекциями облегчает и упрощает разработку приложений. Отсутствие же подобного механизма в составе средств разработки вызывает серьезные проблемы, которые приводят либо к различным ограничениям в реализации, либо к самостоятельной разработке адекватных средств для хранения и обработки массивов информации заранее неопределенного размера.
В Java для работы с коллекциями существует специальная библиотека Collections Framework, включенная в состав пакета java.util.
Рисунок 5.1 - Архитектура Collections Framework
На рисунке 5.1 представлены основные интерфейсы, специфицированные и реализуемые библиотекой Collections Framework. Эти интерфейсы делятся на три основные группы – Collection, Map и Iterator.
Collection представляет собой группу объектов, часто называемых элементами. Некоторые реализации данного интерфейса позволяют дублирование содержащихся элементов, а некоторые нет. Некоторые хранят объекты в упорядоченном виде, а некоторые – в неупорядоченном. Правила хранения элементов задаются нижележащими интерфейсами, сам же интерфейс Collection в JDK прямых реализаций не имеет.
List — это список объектов. Объекты можно добавлять в список (метод add()), заменять в списке (метод set()), удалять из списка (метод remove()), извлекать (метод get()). Существует также возможность организации прохода по списку при помощи итератора. Среди реализаций этого интерфейса в составе JDK имеются классы ArrayList и LinkedList.
Set – множество объектов. Обладает теми же возможностами, что и у List, но позволяет помещать в множество один объект только один раз. Т.е. двойное добавление одного и того же объекта в множество не изменяет само множество. При этом напрямую получить конкретный объект из множества нельзя, можно только проверить, входит ли данный объект в множество (метод contains()). Однако можно получить итератор, который содержит все объекты из множества. Об этом подробнее рассказано в разделе 3.2.3. Классы, реализующие интерфейс Set: HashSet, TreeSet.
Map – отображение или ассоциативный массив. В Map можно добавлять не отдельные объекты, а пары объектов (ключ, значение). Соответственно есть операции поиска значения по ключу. Добавление пары с уже существующим в Map ключем приводит к замене, а не к добавлению. Из отображения (Map) можно получить множество (Set) ключей и список (List) значений. Классы, реализующие интерфейс: HashMap, TreeMap, LinkedHashMap.
SortedSet и SortedMap служат для хранения объектов в отсортированном виде.