Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП зачет.docx
Скачиваний:
89
Добавлен:
01.04.2022
Размер:
3.08 Mб
Скачать

Вопрос 14. Коллекции объектов в Java. P.S. Взято из лекции

Классы коллекций располагаются в пакете java.util. Там содержится большое кол-во различных классов, при помощи которых мы можем взаимодействовать с коллекциями.

Что такое коллекции объектов. Это очень мощный и исключительно полезный механизм. Простейшей коллекцией является массив. Но массив имеет ряд недостатков. Один из самых существенных - размер массива фиксируется до начала его использования. Т.е. мы должны заранее знать или подсчитать, сколько нам потребуется элементов коллекции до начала работы с ней. Зачастую это неудобно, а в некоторых случаях — невозможно.

Самое главное свойство коллекций - неограниченность размера. Выделение необходимых ресурсов спрятано внутри соответствующего класса, и поэтому работа с коллекциями значительно облегчает и упрощает разработку приложений. Одним из наиболее используемых классов является ArrayList. Основное его преимущество - нет ограничения по размеру.

Коллекции в джава разбиты на 3 категории:

  • List (список);

  • Set (множество);

  • Map (отображение);

Эти интерфейсы составляют основу для построения классов коллекции Java.

Лист - список объектов. Объекты в список можно добавлять(add), изменять(set), удалять(remove) и извлекать(get). Также существует возможность организации прохода по списку при помощи итератора - вспомогательного объекта, который используется для прохода по коллекции объекта.

Set - множество неповторяющихся объектов. Те же возможности, что и у List, но объект может входить в множество только 1 раз.

Map - отображение, ассоциативный массив. В Map добавляется не 1 объект, а пара в виде ключ-значение. Добавление пары с уже существующим Map-ключом приводит к замене, а не к добавлению. Т.е. идентифицирующим полем является ключ и ему соответствует какое-то значение. Получается, что набор ключей - это Set, а сами значения - список.

Общее свойство - все эти коллекции работают с Object.java, базовым классом. Это значит, что можно добавлять в коллекцию любые объекты Java, так как от Object наследуются все классы, которые мы создаём. Также и при извлечении из коллекции какого-либо элемента получается обджект. Зачастую это приводит к необходимости преобразования полученного из коллекции объекта к нужному нам классу.

Вопрос 15. Итераторы Взято из лекции

Итератор - это вспомогательный объект, который используется для прохода по коллекции объектов. Они базируется на интерфейсе Iterator, определенном в пакете java.util, т.е. любой итератор имеет следующие методы: 1) boolean hasNext() - есть ли еще элементы в коллекции вообще, можно использовать в циклах;

2) Object Next() - получение следующего объекта в коллекции;

3) void remove() - удаляет последний выбранный элемент из коллекции;

Кроме интерфейса Iterator, существуют специализированные интерфейсы:

ListIterator - расширенный вариант итератора с доп возможностями при работе со списками;

Enumerator - нужен для совместимости с предыдущими версиями.

Интерфейс Collection содержит в себе метод, который возвращает объект типа Iterator: Iterator iterator(). Исходя из этого, это обязывает все классы коллекций создавать поддержку итераторов при помощи вложенных классов, которые удовлетворяют интерфейсу Iterator. ЧТО??????

Еще одна особенность интерфейса Iterator - это метод remove(). Этот метод позволяет удалить из коллекции последний извлеченный из нее элемент. В то же время в интерфейсе Collection также определен метод remove(Object obj) и removeAll(). Возникает вопрос: зачем, и как с этим работать. Идея в том, что удаление из коллекции объектов и вообще модификации коллекции параллельно с проходом по коллекции через итераторы запрещено. Т.е. когда мы проходим коллекцию через итератор мы методом remove() можем удалить последние извлеченные, а все остальные возможности изменения коллекции реализуются через интерфейс Collection. Если мы пытаемся изменить коллекцию на этапе ее прохода через итератор, возникнет исключение ConcurrentModificationException.

П.с. мне вообще это непонятно… ++++++