Разработка приложений на языке C#. Полезные настройки. Особые спецификаторы формата, страница 24

ArrayList other = (ArrayList)men.Clone();      // Создаем клон списка

Console.WriteLine("\nMen Clone:\n");

foreach (Man m in other)

  m.Out();

Попробуйте изменить оригинал, проверить копию (клон) и ответить на вопрос: "Какой тип копирования был использован по умолчанию?"

Следующий фрагмент демонстрирует некоторые другие технологические приемы работы с массивами, которые считались бы ошибочными в С++. Стандартный массив ссылок, однажды созданный, может «бросить» свои данные на съедение сборщику мусора и быть заново инициализирован новым набором ссылок.

Контейнер типа ArrayList может быть создан на основе стандартного массива, а затем дополнен не только отдельными ссылками, но и целыми коллекциями ссылок, которые вставляются в указанные нами позиции. Роль вставляемой коллекции может выполнять объект любого класса, который реализует интерфейс ICollection. Стандартный массив удовлетворяет этому условию, поэтому он может быть вставлен внутрь коллекции типа ArrayList.

Man

  ken = new Man ("Ken Wood",40),

  len = new Man ("Lennie Tristano",50),

  ben = new Man ("Ben Webster",60);

Man[] ma = { ken, len, ben };

ArrayList men = new ArrayList (ma);  // Создаем коллекцию на основе массива

ma = new Man[] { ken, ken, ken, ken }; // Массив меняет все свои элементы

int id = men.LastIndexOf (ben); // Узнаем где (в коллекции) сидит Ben Webster

men.InsertRange (id, ma);    // Вставляем перед ней стандартный массив

men.InsertRange (id, ma);    // Повторяем вставку (для убедительности)

Console.WriteLine("\nMen after ken's attack:\n");

foreach (Man m in men)

  m.Out();

Задание. Продолжите тему (в коллекции слишком много Ken'ов) и реализуйте такой алгоритм.

·  Удалите первую ссылку на Ken Wood. Используйте метод Remove.

·  Найдите позицию следующего Ken’а (IndexOf) и удалите объект с помощью метода RemoveAt.

·  Вычислите, сколько всего объектов расположено в коллекции после найденной позиции Ken. Присвойте это значение переменной nLeft и выведите на экран.

·  Возродите стандартный массив ma так, чтобы его размер стал nLeft.

·  Скопируйте последние nLeft элементов коллекции в массив ma. Используйте метод CopyTo.

·  Проверьте, что получилось.

·  Удалите из коллекции всех оставшихся Ken’ов (цикл, использующий Contains и Remove).

·  Скопируйте часть коллекции в стандартный массив с помощью метода ToArray класса ArrayList.

·  Объясните различие между методами CopyTo и ToArray.

Виды коллекций

Коллекцией объектов называют множество объектов совместимых типов, объединенное в одну динамическую структуру данных с целью управления ею общими для всех типов коллекций способами. Общими инструменттами для всех коллекций из пространства имен Collections являются:

·  Перечислитель

·  Средства синхронизации

·  Метод CopyTo

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

Назначение

Массивы

Обычные, встроенные в язык, массивы.

ArrayList

Динамическая коллекция, позволяющая хранить ссылки на объекты произвольных типов. Реализация абстракции списка на базе массива, Позволяет динамически изменять размер, добавлять и удалять элементы.

Hashtable

Реализует абстракцию Dictionary, или коллекции пар (key-value). Использует алгоритмы хеширования.

SortedList

Реализация абстракции Dictionary на базе сортированного массива.

Stack

Коллекция, осуществляющая доступ по принципу Last In–First Out. В качестве хранилища используется массив.

Queue

Коллекция, осуществляющей доступ по принципу First In–First Out. В качестве хранилища используется массив.

BitArray

Позволяет создавать и управлять последовательностями бит.