Коллекция — конструкция языка Java
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция № 7
7. КОЛЛЕКЦИИ
Коллекция – это конструкция языка Java, предназначенная для хранения нескольких переменных или объектов одного типа. В отличие от рассмотренных ранее массивов коллекции являются более сложной, но в то же время более гибкой конструкцией, основным достоинством которой является возможность динамически изменять размер коллекции, помещая в неё или удаляя из неё элементы. Основной недостаток коллекций – большие затраты вычислительного времени на обработку коллекции (добавление, удаление, поиск элементов и другие операции), а также необходимость использования специальных методов работы с коллекциями. На следующем рисунке представлены схемы, иллюстрирующие основные отличия коллекции от массива.
При создании моделей в AnyLogic коллекции удобно использовать для решения задач анализа ситуации и принятия управляющего решения. Например, коллекция может содержать ссылки на объекты - элементы путевого развития железнодорожной станции для оценки их свободности и выбора маневрового маршрута по станции. Также коллекция может содержать, например, данные обо всех поездах, составах или вагонах, находящихся на железнодорожной станции, для определения рациональной последовательности их обработки. В отличие от потоковых диаграмм AnyLogic, моделирующих относительно простые решения по обработке ограниченного числа агентов, накопление данных об агентах и других объектах модели в коллекциях позволяет при помощи диаграмм действий моделировать процесс принятия и реализации более сложных управленческих решений.
Для создания коллекции в AnyLogic достаточно выбрать блок «Коллекция» в палитре «Агент» и задать свойства коллекции: имя коллекции, тип коллекции и тип элементов, которые будут храниться в коллекции.
В языке Java существует несколько типов коллекций, различающихся внутренней структурой хранения. Наиболее часто используемыми типами коллекций являются:
• ArrayList – индексированная (каждый элемент имеет свой индекс) динамически расширяющая и сокращающая последовательность, по свойствам похожа на массив;
• LinkedList – упорядоченная последовательность или связанный список, в котором элементы добавляются или удаляются, как правило, с концов списка. Применяется для описания, например, очередей, в которых важен порядок следования элементов очереди;
• HashSet – неупорядоченная неиндексированная коллекция, исключающая дубликаты. Элементы данной коллекции не имеют индекса и в коллекции можно хранить только уникальные элементы;
• TreeSet – отсортированное множество неиндексированных элементов. При добавлении элемента в коллекцию она автоматически сортируется в соответствии с заданным правилом, в результате чего новый элемент помещается в определённое место коллекции, что значительно сокращает время на его поиск.
Структура коллекции определяет, главным образом, скорость выполнения операций с коллекцией, а также свойства (возможности) коллекции.
Различные типы коллекций имеют разную временную сложность операций. Например, поиск заданного элемента в коллекции, содержащей 10 000 000 элементов, может потребовать 80 миллисекунд для коллекции типа ArrayList, 100 миллисекунд – для LinkedList и менее 1 миллисекунды для HashSet и TreeSet. Для обеспечения наибольшей эффективности необходимо исследовать, какие из операций выполняются чаще, и выбрать соответствующий тип коллекции. В следующей таблице и на рисунке показано, каким образом увеличивается время выполнения наиболее распространённых операций с коллекциями по мере увеличения размера коллекции
Операция
ArrayList
LinkedList
HashSet
TreeSet
Получение размера
Постоянная
Постоянная
Постоянная
Постоянная
Добавление элемента
Постоянная
Постоянная
Постоянная
Логарифмическая
Удаление элемента
Линейная
Линейная
Постоянная
Логарифмическая
Удаление по индексу
Линейная
Линейная
–
–
Получение элемента по индексу
Постоянная
Линейная
–
–
Поиск элемента
Линейная
Линейная
Постоянная
Логарифмическая
Из рисунка видно, что при относительно малом числе элементов коллекция с линейной сложностью будет работать лучше, чем коллекция с постоянной сложностью.
Коллекции популяций агентов в AnyLogic
Для хранения популяций агентов в AnyLogic используются два специальных типа коллекции:
• AgentArrayList – этот тип коллекции выбирают, если список агентов относительно постоянен, или если потребуется часто обращаться к конкретным элементам популяции;
• AgentLinkedHashSet – этот тип следует выбирать, если планируется часто добавлять новых агентов или удалять существующие. Например, если моделируется изменение населения города в течение достаточно долгого промежутка времени.
Тип коллекции можно выбирается в секции свойств «Специфические» вложенного агента
Методы коллекции ArrayList
add(элемент) – добавление элемента в конец коллекции. Элемент может переменной любого типа Java, экземпляром класса Java или агентом AnyLogic.
get(индекс элемента) – получение элемента коллекции по его индексу. Нумерация индексов в коллекции начинается так же как и у массивов – с нуля.
size() – получение числа элементов коллекции.
indexOf(элемент) – получение индекса элемента в коллекции.
contains(элемент) – определение наличия элемента коллекции. Если элемент присутствует, то результатом выполнения метода будут true, в противном случае – false.
remove(индекс) или remove(элемент) – удаление элемента из коллекции, соответственно, по его индексу или по содержимому элемента.
set(индекс, элемент) – замена элемента в коллекции с индексом «индекс» на новый элемент, указанный в качестве параметра метода set.
clear() – очистка коллекции.
Дополнительные методы коллекции LinkedList
addLast(элемент) и addFirst(элемент) – добавление элемента, соответственно, в конец и начало списка.
add(индекс, элемент) – добавление элемента в список ПЕРЕД элементом, с указанным индексом.
removeLast() и removeFirst()– удаление элемента, находящегося, соответственно, в конце и начале списка.
Особенности коллекций HashSet, LinkedHashSet и TreeSet
В коллекции данного типа допускается помещать только уникальные элементы, например, название стран мира, гос. номеров автомобилей, номеров паспортов и т.п. Остальные свойства и методы коллекций HashSet, LinkedHashSet аналогичны свойствам и методам коллекций, соответственно, ArrayList и LinkedList. В коллекции TreeSet элементы хранятся в отсортированном виде, причём сортировка выполняется автоматически при помещении очередного элемента в коллекцию. Например, элементы коллекции TreeSet, содержащая названий стран мира, будет отсортирована в алфавитном порядке по умолчанию.
ЗАДАНИЕ Заполнить коллекцию в AnyLogic и в поле действия при запуcке свойств main продемонстрировать (написать код) владение методами работы с коллекциями. Прикрепить архив модели