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 |
Позволяет создавать и управлять последовательностями бит. |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.