Коллекции

Активный объект может содержать переменные.  Переменные обычно используются для моделирования изменяющихся характеристик объекта или для хранения результатов работы модели. AnyLogic поддерживает два типа переменных – простые переменные и коллекции. 

Переменная представляет собой переменную любого скалярного типа или Java класса. 

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

Как и все другие переменные AnyLogic, коллекции доступны из кода во время работы модели, Вы можете работать с элементами коллекции посредством ее программного интерфейса.

Создание коллекции

 Чтобы создать коллекцию

  1. Перетащите элемент Коллекция  из палитры Основная на диаграмму класса активного объекта (или эксперимента).
  2. Перейдите на страницу Основные панели Свойства.
  3. Введите имя переменной в поле Имя. Это имя будет использоваться для идентификации и доступа к переменной.
  4. Задайте тип коллекции. Выберите один из наиболее часто используемых классов из выпадающего списка Класс коллекции или самостоятельно введите имя Java класса, представляющего собой другую реализацию коллекции. 
  5. Если коллекция является списком или набором (Класс коллекции ArrayListLinkedList, HashSet, LinkedHashSet или TreeSet), задайте тип элементов коллекции. Выберите один из наиболее часто используемых типов из выпадающего списка Тип элементов или самостоятельно введите имя любого другого Java класса. Тем самым Вы позволите коллекции содержать элементы только заданного класса (и его подклассов). Выбрав Object, Вы позволяете коллекции содержать элементы абсолютно любого Java класса.
  6. Если же Класс коллекции TreeMap, HashMap или LinkedHashMap, то Вам будет нужно задать тип элементов-ключей, поддерживаемых этой коллекцией, в поле Тип элементов-ключей, а тип элементов-значений - в поле Тип элементов-значений.
Основные свойства

Имя – Имя коллекции

Отображать имя – Если опция выбрана, то имя коллекции будет отображаться в графическом редакторе.

Исключить – Если опция выбрана, то коллекция будет исключена из модели.

На презентации – Если опция выбрана, то коллекция будет отображаться на презентации во время выполнения модели.

Уровень доступа – Уровень доступа к коллекции. Есть четыре уровня доступа:
    private – 
коллекция доступна только из этого класса активного объекта
    protected
коллекция доступна из этого класса активного объекта и его подклассов
    default
коллекция доступна из любого места модели
    public
коллекция доступна из всех открытых моделей.

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

Сохранять при сохранении состояния модели – Если опция выбрана, то коллекция будет сохраняться при сохранении состояния модели.

Класс коллекцииКласс коллекции. Выберите один из наиболее часто используемых классов из выпадающего списка или самостоятельно введите имя Java класса, представляющего собой другую реализацию коллекции.

Тип элементов – [Виден, если Класс коллекции ArrayListLinkedList, HashSet, LinkedHashSet или TreeSet] Тип элементов коллекции. Выберите один из наиболее часто используемых типов из выпадающего списка или самостоятельно введите имя любого другого Java класса. Тем самым Вы позволите коллекции содержать элементы только заданного класса (и его подклассов). Выбрав Object, Вы позволяете коллекции содержать элементы абсолютно любого Java класса.

Тип элементов-ключей – [Виден, если Класс коллекции TreeMap, HashMap или LinkedHashMap] Тип элементов-ключей, поддерживаемых этой коллекцией.

Тип элементов-значений – [Виден, если Класс коллекции TreeMap, HashMap или LinkedHashMap]  Тип элементов-значений, соответствующих ключам коллекции.

Типы коллекций

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

Операция ArrayList
LinkedList HashSet TreeSet
Получение размера Постоянная Постоянная Постоянная Постоянная
Добавление элемента Постоянная Постоянная Постоянная Логарифмическая
Удаление заданного элемента Линейная Линейная Постоянная Логарифмическая
Удаление по индексу Линейная Линейная - -
Получение элемента по индексу Постоянная Линейная - -
Проверка, содержит ли коллекция элемент Линейная Линейная Постоянная Логарифмическая

AnyLogic поддерживает следующие реализации интерфейса коллекций, заданного в Java Collections Framework: ArrayList, LinkedListHashSetLinkedHashSet, TreeSet, HashMap, TreeMap.

Следующие две коллекции являются наиболее часто используемыми:

Реализация интерфейса List в виде массива переменного размера. Реализует все опциональные операции списка; разрешает добавление любых элементов, в том числе null. (Этот класс, грубо говоря, эквивалентен классу Vector, за исключением того, что он не синхронизирован).

Реализация интерфейса List в виде связного списка. Реализует все опциональные операции списка; разрешает добавление любых элементов, в том числе null. В дополнение к методам интерфейса List, класс LinkedList предоставляет однотипно названные методы для получения, удаления и вставки элемента в начало и конец списка. Эти методы позволяют использовать связные списки в качестве очередей, стеков и очередей с двусторонним доступом.

Класс реализует интерфейс Queue, предоставляющий операции добавления, извлечения и т.д., работающие по принципу FIFO (первым прибыл, первым обслужен).

Полная документация (обзор, учебные пособия, справочник классов) по коллекциям Java Вы можете найти по адресу http://java.sun.com/j2se/1.5.0/docs/guide/collections (на английском языке).