Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

овп2 / ОВП2_коллекции1

.pdf
Скачиваний:
6
Добавлен:
03.03.2016
Размер:
317.39 Кб
Скачать

ОСНОВЫ ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ (2 ЧАСТЬ)

Коллекции

В С# под коллекцией понимается некоторая группа объектов.

Коллекции упрощают реализацию многих задач программирования, предлагая уже готовые решения для построения структур данных.

Все коллекции разработаны на основе четко определенных интерфейсов, поэтому стандартизируют способ обработки группы объектов.

В среде .NET Framework поддерживаются пять типов коллекций:

Необобщенные

(System.Collections )

Специальные

(System.Collections.Specialized )

C поразрядной организацией

(System.Collections )

Обобщенные

(System.Collections.Generic )

Параллельные

(System.Collections.Concurrent )

Коллекции

Интерфейсы, используемые в коллекциях C#

Интерфейс

Описание

 

 

IEnumerable<T>

необходим, когда с коллекцией используется оператор

 

foreach. Этот интерфейс определяет метод

 

GetEnumerator(), возвращающий перечислитель, который

 

реализует IEnumerator.

ICollection<T>

реализован классами обобщенных коллекций. С его

 

помощью можно получить количество элементов в

 

коллекции (свойство Count) и скопировать коллекцию в

 

массив (метод СоруТо()). Можно также добавлять и

 

удалять элементы из коллекции (Add(), Remove(), Clear()).

IList<T>

предназначен для создания списков, элементы которых

 

доступны по своим позициям. Определяет индексатор, а

 

также способы вставки и удаления элементов в

 

определенные позиции (методы Insert() и Remove()).

 

Унаследован от ICollection<T>.

Коллекции

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Интерфейсы, используемые в коллекциях C#

 

 

 

 

 

 

 

 

Интерфейс

Описание

 

 

 

 

 

 

 

 

ISet<T>

реализуется множествами. Он позволяет комбинировать

 

 

 

 

различные множества в объединения, а также проверять,

 

 

 

 

не пересекаются ли два множества. ISet<T> унаследован

 

 

 

 

от ICollection<T>.

 

 

 

IDictionary<TKey,

реализуется обобщенными классами коллекций,

 

 

 

TValue>

элементы которых состоят из ключа и значения. С

 

 

 

 

помощью этого интерфейса можно получать доступ ко

 

 

 

 

всем ключам и значениям, извлекать элементы по

 

 

 

 

индексатору типа ключа, а также добавлять и удалять

 

 

 

 

 

 

 

 

элементы.

 

 

 

 

 

 

 

 

ILookup<TKey,

Подобно IDictionary<TKey, TValue> поддерживает

 

 

 

TValue>

ключи и значения. Однако в этом случае коллекция

 

 

 

 

может содержать множественные значения для одного

 

 

 

 

ключа.

Коллекции

Интерфейсы, используемые в коллекциях C#

Интерфейс

Описание

 

 

IComparer<T>

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

 

элементов внутри коллекции с помощью метода

 

Compare().

 

 

IEqualityComparer<T>

реализован компаратором, который может быть

 

применен к ключам словаря. Через этот интерфейс

 

объекты могут быть проверены на предмет

 

эквивалентности друг другу. В .NET 4 этот интерфейс

 

также реализован массивами и кортежами.

IProducerConsumerCo

добавлен в версию .NET 4 для поддержки новых,

llection<T>

безопасных в отношении потоков классов коллекций

 

 

Необобщенные коллекции

Представляют собой структуры данных общего назначения, оперирующие ссылками на объекты.

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

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

Но если коллекция предназначается для хранения объекта конкретного типа, то необобщенные коллекции не обеспечивают типовую безопасность

В пространстве имен System.Collections определен целый ряд интерфейсов необобщенных коллекций.

Необобщенные коллекции

Структура DictionaryEntry

В структуре определяются два свойства: public object Key { get; set; }

public object Value { get; set; }

Эти свойства служат для доступа к ключу или значению, связанному с элементом коллекции.

Объект типа DictionaryEntry может быть сконструирован с помощью конструктора:

public DictionaryEntry(object key, object value)

где кey обозначает ключ, a value — значение.

Классы необобщенных коллекций

ArrayList

Определяет динамический массив, т.е. такой массив, который может при необходимости увеличивать свой

размер.

Hashtable

Определяет хеш-таблицу для пар "ключ-значение"

Queue

Определяет очередь, или список, действующий по принципу "первым пришел — первым обслужен"

SortedList

Определяет отсортированный список пар "ключ-значение"

Stack

Определяет стек, или список, действующий по принципу "первым пришел — последним обслужен"

Обобщенные коллекции

Структура KeyValuePair<TKey, TValue>

В этой структуре определяются два следующих свойства: public ТКеу Key { get; };

public TValue Value { get; };

В этих свойствах хранятся ключ и значение соответствующего элемента коллекции.

Для построения объекта типа KeyValuePair<TKey, TValue> служит конструктор:

public KeyValuePair(ТКеу key, TValue value)

где key обозначает ключ, a value — значение.

Классы обобщенных коллекций

Dictionary<Tkey, TValue>

Сохраняет пары "ключ-значение". Обеспечивает такие же функциональные возможности, как и необобщенный класс

Hashtable

HashSet<T>

Сохраняет ряд уникальных значений, используя хештаблицу

LinkedList<T>

Сохраняет элементы в двунаправленном списке

List<T>

Создает динамический массив. Обеспечивает такие же функциональные возможности, как и необобщенный класс

ArrayList

Queue<T>

Создает очередь. Обеспечивает такие же функциональные возможности, как и необобщенный класс Queue

SortedDictionary<TKey, TValue>

Создает отсортированный список из пар "ключ-значение"

Соседние файлы в папке овп2