Коллекция, представляющая набор объектов, к которым можно получить доступ, пройдя по каждому элементу (в частности, к нему можно получить доступ с помощью foreach цикла) Коллекция содержит несколько элементов, то есть существует объект класса коллекции и N элементных объектов
Поскольку любой класс коллекции реализует интерфейс IEnumerable, любой объект класса коллекции имеет метод GetEnumerator(), который может возвращать объект, реализующий интерфейс IEnumerator, не являющийся ни объектом класса коллекции, ни объектом класса коллекции, а является независимым объектом класса. Этот объект позволяет проходить по каждому элементу в объекте класса коллекции
Если класс коллекции — это пользовательский класс коллекции, пользователь должен реализовать его метод GetEnumerator(), иначе циклы нельзя использовать. Конечно, класс IEnumerator, соответствующий этому классу пользовательской коллекции (класс, реализующий интерфейс), также должен быть настраиван
Например, IEnumerator, соответствующий классу коллекции ArrayList, называется ArrayListEnumeratorSimple IEnumerator, соответствующий классу коллекции Array, — это SZArrayEnumerator (Ни один из этих классов не рассматривается в документации библиотеки классов .NET Framework (MSDN))
1. Интерфейсы в System.Colloctions, отражающие поведение коллекции, включают: 1) ICollection Определите размер, количество enums и методы синхронизации для всех коллекций. Производно из IEnumerable Он определяет самое базовое поведение класса коллекции, и все классы коллекции реализуют этот интерфейс (базовый интерфейс) Но его поведение слишком простое: это в основном собственность Count, и реализовывать его в одиночку не имеет смысла
2)IEnumerable Выведите перечисление, поддерживающее простые итерации на множестве У него есть только один метод — GetEnumerator(), который возвращает интерфейс IEnumerator, через который можно обходить коллекцию Практически все классы коллекций реализуют этот интерфейс
3) IList Реализация IList представляет собой набор значений, которые можно сортировать и доступны по индексу для своих членов, а сама реализует интерфейсы ICollection и IEnumerable является абстрактным базовым классом для всех списков. Существует три категории реализации IList: только для чтения, фиксированный размер и переменный размер.
4) IDictionary Реализация IDictionary представляет собой набор пар ключ/значение, который сам реализует интерфейсы ICollection и IEnumerable является базовым интерфейсом набора пар ключ/значение. Существует три категории реализаций IDictionary: только для чтения, с фиксированным размером и с переменным размером. IDictionary можно назвать словарем, картой или shash списком, и он получает доступ к значениям на основе ключей (любого типа).
2. Классы коллекций, которые можно использовать непосредственно в System.Collections, включают: 1)ArrayList Реализовать интерфейсы: IList, ICollection, IEnumerable Пока коллекция не изменяется, ArrayList может безопасно поддерживать несколько считывателей одновременно По мере добавления элементов в ArrayList ёмкость автоматически увеличивается по требованию путём перераспределения (в 2 раза) Если нужно создать массив объектов, но вы заранее не знаете его размер, можно использовать ArrayList ArrayList называет все элементы объектами, поэтому его необходимо вводить при обращении к элементам в ArrayList Плюсы: динамическое изменение размера, гибкая и удобная вставка и удаление элементов, сортировка Недостатки: Производительность вставки хуже, чем у массивов, не сильных типов
2)BitArray Реализовать интерфейсы: ICollection и IEnumerable Управляйте сжатыми массивами битовых значений.
3) Хэшированная таблица Реализовать интерфейсы: IDictionary, ICollection, IEnumerable Вы можете свободно добавлять и удалять элементы в Hashtable, например, ArrayList, но без накладных расходов производительности
4) SortedList Реализовать интерфейсы: IDictionary, ICollection, IEnumerable SortedLIst сочетает преимущества ArrayList и Hashtable и может быть отсортирован по значению ключа
5) Очередь Реализовать интерфейсы: ICollection и IEnumerable Queques — это очереди, первый пришёл — первым ушёл доступ к отдельным элементам Вы можете вызвать метод GetEnumerator() объекта Queque, чтобы объект IEnumerator прошёл по элементам в очереди
6) Стек Реализовать интерфейсы: ICollection и IEnumerable Стек — это стек, который обращается к отдельным элементам по принципу «последний пришёл — первый» Вы можете вызвать метод GetEnumerator() объекта Stack, чтобы объект IEnumerator прошёл через элементы стека
3. Упомянутые выше классы коллекции — это все классы общего собрания, и большинство элементов, которые они принимают, относятся к типу объекта, когда объект вставляется в После коллекции исходная информация о типах теряется — то есть эти классы общего собрания не сильно типизированы Обходным путём является использование сильно типизированных классов коллекций Пространство имён System.Collections Пространство имён System.Collections.Specialized Некоторые классы могут соответствовать требованиям и использоваться напрямую или унаследовать
|