Скачать презентацию Классы-коллекции ü Библиотека NET Framework содержит большой набор Скачать презентацию Классы-коллекции ü Библиотека NET Framework содержит большой набор

9_C#_классы_коллекции.pptx

  • Количество слайдов: 24

Классы-коллекции ü Библиотека. NET Framework содержит большой набор классов-коллекций, которые используются при работе с Классы-коллекции ü Библиотека. NET Framework содержит большой набор классов-коллекций, которые используются при работе с наборами элементов. ü Классы-коллекции из пространства имен System. Collections поддерживают слабо типизированные коллекции, элементы которых имеют тип System. Object. Эти коллекции поддерживаются всеми версиями. NET Framework, начиная с 1. 0. ü В версиях. NET Framework 2. x и выше в пространстве имен System. Collections. Generic определены интерфейсы и классы обобщенных коллекций, которые дают возможность создавать строго типизированные коллекции.

Классы-коллекции в версиях 1. x – 4. x ü В версиях 1. x было Классы-коллекции в версиях 1. x – 4. x ü В версиях 1. x было определено небольшое число строго типизированных коллекций в пространстве имен System. Collection. Specialized, а в пространстве имен System. Collections определены абстрактные классы Collection. Base : IList, ICollection, IEnumerable Dictionary. Base : IDictionary, ICollection, IEnumerable Read. Only. Collection. Base : ICollection, IEnumerable Name. Object. Collection. Base : ICollection, IEnumerable, ISerializable, IDeserialization. Callback которые можно было использовать как базовые для создания пользовательских типизированных (strong typed) коллекций. ü В версиях 2. x и выше в пространстве имен System. Collections. Object. Model определены обобщенные типы для использования в качестве базовых при определении пользовательских типов коллекций.

Обобщенные классы коллекций в BCL ü Большая часть обобщенных классов-коллекций, определенных в пространстве имен Обобщенные классы коллекций в BCL ü Большая часть обобщенных классов-коллекций, определенных в пространстве имен System. Collections. Generic – это прямые аналоги обычных типов-коллекций. ü В (1) использование старых неуниверсальных коллекций в приложениях для . NET Framework 2. 0 и выше не рекомендуется, так как замедляет работу кода или ухудшает его читаемость. ü Обычные (не обобщенные) коллекции поддерживаются ради совместимости со старыми версиями. NET Framework. (1) Инбар Газит (Inbar Gazit) “ Практические рекомендации по работе с коллекциями” – MSDN Magazine, August 2007. Инбар Газит — руководитель программы, занимающийся библиотеками универсальных (generic) классов для группы CLR.

Интерфейс ICollection реализуют все необобщенные и некоторые обобщенные классы-коллекции public interface ICollection : IEnumerable Интерфейс ICollection реализуют все необобщенные и некоторые обобщенные классы-коллекции public interface ICollection : IEnumerable { int Count {get; } - число элементов в коллекции bool Is. Synchronized {get; } - информация о том, является ли доступ синхронизированным ( thread-safe) object Sync. Root {get; } - дает доступ к объекту синхронизации void Copy. To( Array array, int index ); - копирует элементы коллекции в массив Array } public interface ICloneable { object Clone(); } - создает новый объект–копию

Интерфейс IList public interface IList : ICollection, IEnumerable { object this[ int index ] Интерфейс IList public interface IList : ICollection, IEnumerable { object this[ int index ] {get; set; } bool Is. Fixed. Size {get; } bool Is. Read. Only {get; } int Add( object value ); void Clear(); bool Contains( object value ); int Index. Of( object value ); void Insert( int index, object value ); void Remove( object value ); void Remove. At( int index ); } ü В коллекции, реализующей интерфейс IList • определен индексатор с целым индексом; • в коллекцию можно вставлять элементы. ü Реализован в коллекциях, к элементам которых можно обращаться по индексу, и в коллекцию можно вставлять элементы. Реализован в Array. List.

Интерфейсы ICollection<T> и IList<T> ü Обобщенный интерфейс ICollection<T> public interface ICollection<T> : IEnumerable<T>, IEnumerable Интерфейсы ICollection и IList ü Обобщенный интерфейс ICollection public interface ICollection : IEnumerable, IEnumerable { int Count { get; } bool Is. Read. Only { get; } void Add (T item); void Clear (); bool Contains ( T item); void Copy. To (T[] array, int array. Index); boolean Remove ( T item); } ü Обобщенный интерфейс IList public interface IList : ICollection, IEnumerable { T this [int index] { get; set; } int Index. Of (T item); void Insert (int index, T item); void Remove. At (int index); }

Интерфейсы для итераторов ü Следующие обобщенные интерфейсы определены в пространстве имен System. Collections. Generic. Интерфейсы для итераторов ü Следующие обобщенные интерфейсы определены в пространстве имен System. Collections. Generic. public interface IEnumerable : IEnumerable { IEnumerator Get. Enumerator (); } public interface IEnumerator : IDisposable, IEnumerator { T Current { get; } } ü Следующие обычные(необобщенные) интерфейсы определены в пространстве имен System. Collections. public interface IEnumerator { object Current {get; } bool Move. Next(); void Reset(); } public interface IEnumerable { IEnumerator Get. Enumerator(); }

Классы-коллекции из пространства имен System. Collections Класс Интерфейсы Описание Array. List IList, ICollection, IEnumerable, Классы-коллекции из пространства имен System. Collections Класс Интерфейсы Описание Array. List IList, ICollection, IEnumerable, ICloneable массив элементов с динамически изменяющимся размером Queue ICollection, IEnumerable, ICloneable очередь FIFO ( first in - first out) Stack ICollection, IEnumerable, ICloneable очередь LIFO ( last in - first out) Bit. Array ICollection, IEnumerable, ICloneable массив бит (любой длины)

Классы-коллекции из пространства имен System. Collections. Specialized Класс String. Collection struct Bit. Vector 32 Классы-коллекции из пространства имен System. Collections. Specialized Класс String. Collection struct Bit. Vector 32 Интерфейсы IList, ICollection, IEnumerable - Описание Типизированная коллекция строк (string), реализующая IList. Эффективен для набора булевских переменных или небольших целых чисел

Обобщенные классы Queue<T> и Stack<T> Класс Интерфейсы Описание Queue<T> IEnumerable<T>, ICollection, IEnumerable Очередь. Обобщенная Обобщенные классы Queue и Stack Класс Интерфейсы Описание Queue IEnumerable, ICollection, IEnumerable Очередь. Обобщенная версия Queue. Stack IEnumerable, ICollection, IEnumerable Стек. Обобщенная версия Stack.

Обобщенные классы List<T> и Linked. List<T> Класс Интерфейсы Описание List<T> IList<T>, ICollection<T>, Список объектов, Обобщенные классы List и Linked. List Класс Интерфейсы Описание List IList, ICollection, Список объектов, к которым возможен IEnumerable, IList, доступ по целочисленному индексу. ICollection, IEnumerable Обобщенная версия Array. List. Элементы хранятся в массиве. Быстро добавляются элементы в конец, поиск и вставка более медленные. Linked. List ICollection, IEnumerable, ICollection, IEnumerable, ISerializable, IDeserialization. Callback Cвязанный список. Нет аналога в обычных коллекциях. Реализован в виде цепочки динамически размещаемых объектов. Быстрая операция вставки. Замедляет работу сборщика мусора. При больших списках затраты, связанные с каждым узлом.

Обобщенные классы из System. Collections. Object. Model Класс Интерфейсы Описание Collection<T> IList<T>, ICollection<T>, IEnumerable<T>, Обобщенные классы из System. Collections. Object. Model Класс Интерфейсы Описание Collection IList, ICollection, IEnumerable, IList, ICollection, IEnumerable Свойство protected IList Items { get; } дает доступ к “внутренней” коллекции. Read. Only. Collection IList, ICollection, IEnumerable, IList, ICollection, IEnumerable Readonly оболочка для коллекции. Единственный открытый конструктор : public Read. Only. Collection ( IList list )

Классы-словари (хэш-таблицы) ü Классы-словари (хэш-таблицы) используются для работы с множеством пар <ключ, значение> (<key, Классы-словари (хэш-таблицы) ü Классы-словари (хэш-таблицы) используются для работы с множеством пар <ключ, значение> (). ü В паре ключ обеспечивает косвенную ссылку на данные (значение) : • ключ не может иметь значение null, значение (value) может иметь значение null; • коллекция не может содержать две пары с одинаковым ключом. ü С помощью хэш-функции ключ преобразуется в целочисленное значение (хэш-код) из некоторого диапазона 0, . . . N-1. Хэш-код используется как индекс в таблице (hash table), в которой хранятся прямые или косвенные ссылки на данные (значения). ü Классы-словари реализуют интерфейсы IDictionary или IDictionary .

Структуры для элементов коллекций ü В необобщенных коллекциях-словарях каждый элемент (пара ключзначение) хранится в Структуры для элементов коллекций ü В необобщенных коллекциях-словарях каждый элемент (пара ключзначение) хранится в объекте Dictionary. Entry. public struct Dictionary. Entry { public Dictionary. Entry( object key, object value ); public object Key {get; set; } public object Value {get; set; } } ü В обобщенных коллекциях-словарях каждый элемент (пара ключзначение) хранится в объекте Key. Value. Pair < TKey, TValue>. public struct { Key. Value. Pair < TKey, TValue> public Key. Value. Pair ( TKey key, TValue value ); public TKey { get; } public TValue { get; } }

Интерфейс IDictionary ü Интерфейс IDictionary реализуют классы • Hashtable • Hybrid. Dictionary • List. Интерфейс IDictionary ü Интерфейс IDictionary реализуют классы • Hashtable • Hybrid. Dictionary • List. Dictionary • Dictionary. Base • Sorted. List public interface IDictionary : ICollection, IEnumerable { bool Is. Fixed. Size {get; } bool Is. Read. Only {get; } object this[ object key] {get; set; } ICollection Keys {get; } ICollection Values {get; } void Add ( object key, object value); void Clear(); void Remove( object key ); bool Contains ( object key ); IDictionary. Enumerator Get. Enumerator(); }

Интерфейс IDictionary <TKey, TValue> public interface IDictionary < TKey, TValue> : ICollection < Key. Интерфейс IDictionary public interface IDictionary < TKey, TValue> : ICollection < Key. Value. Pair < TKey, TValue>>, IEnumerable { TValue this [ TKey key]; ICollection Keys { get; } ICollection Values { get; } void Add ( TKey key, TValue value); bool Contains. Key ( TKey key); bool Remove ( TKey key); bool Try. Get. Value (TKey key, out TValue value); }

Хэш-функция ü Хэш-функция используется для быстрой генерации числа (hash code), отвечающего значению объекта. По Хэш-функция ü Хэш-функция используется для быстрой генерации числа (hash code), отвечающего значению объекта. По умолчанию используется функция Get. Hash. Code(). ü Для корректной работы классов-словарей для хэш-функции Get. Hash. Code() должно быть выполнено: • для двух совпадающих объектов одного и того же типа хэш-функция должна возвращать одно и тоже значение; • реализация Get. Hash. Code() не должна бросать исключения; • если в производном классе переопределен метод Get. Hash. Code(), в нем также должен быть переопределен метод Equals() так, чтобы два равных объекта имели одно и то же значение хэш-кода. ü Метод класса Object public virtual int Get. Hash. Code(); может использоваться как хэш-функция, если равенство объектов понимается как равенство ссылок. ü Реализация Get. Hash. Code() из класса String возвращает уникальный хэш-код для каждого значения string.

Коэффициент заполнения (load factor) ü Хэш-функция может значения разных ключей преобразовать к равным индексам. Коэффициент заполнения (load factor) ü Хэш-функция может значения разных ключей преобразовать к равным индексам. Возникает коллизия (collision). В реализации класса Hashtable используется алгоритм rehasing ( по определенному алгоритму вычисляется новое значение хэш-кода для ключа). ü Коэффициент заполнения (load factor) – максмальное значение отношения числа элементов в таблице к числу ячеек (buckets). ü Когда текущее значение отношения числа элементов в таблице к числу ячеек становится равным коэффициенту заполнения, число ячеек (buckets) автоматически увеличивается до наименьшего простого числа, которое более, чем в два раза превышает текущее число сегментов. ü Небольшие значения коэффициента заполнения обеспечивают быстрый поиск, но увеличивают расход памяти. Значение по умолчанию равно 1. 0 (0. 72) и дает наилучший баланс между скоростью и размером. ü Информация из MSDN - Scott Mitchell. An Extensive Examination of Data Structures. Part 2: The Queue, Stack, and Hashtable.

Классы-словари из пространства имен System. Collections Класс Интерфейсы Описание Hash. Table IDictionary, ICollection, IEnumerable, Классы-словари из пространства имен System. Collections Класс Интерфейсы Описание Hash. Table IDictionary, ICollection, IEnumerable, ISerializable, IDeserialization. Callback, ICloneable словарь (пары ключ-значение) с быстрым доступом по ключу ( упорядочен по хэш-коду ключа) Sorted. List IDictionary, ICollection, IEnumerable, ICloneable таблица с быстрым доступом по ключу или индексу (гибрид Array и Hashtable)

Классы-словари из пространства имен System. Collections. Specialized Класс Интерфейсы Описание String. Dictionary IEnumerable Коллекция Классы-словари из пространства имен System. Collections. Specialized Класс Интерфейсы Описание String. Dictionary IEnumerable Коллекция пар < string , string >. List. Dictionary IDictionary, ICollection, IEnumerable Коллекция, реализующая IDictionary как односвязный список. Эффективнее Hashtable, если число элементов не превышает 10. Hybrid. Dictionary IDictionary, ICollection, IEnumerable Коллекция, которая реализуется как List. Dictionary для небольшого числа элементов и преобразуется в Hashtable при увеличении числа элементов.

Обобщенные классы-словари Dictionary <TKey, TValue> Коллекция пар ключ-значение. Обобщенная версия Hashtable. Реализация в виде Обобщенные классы-словари Dictionary Коллекция пар ключ-значение. Обобщенная версия Hashtable. Реализация в виде хэш-таблицы. Быстрый поиск, удаление и добавление элементов для больших коллекций. Sorted. Dictionary Коллекция пар ключ-значение, отсортированных по ключу на основе реализации IComparer. Реализация в виде сбалансированного дерева. Быстрый поиск, более медленная вставка. Нет аналога в обычных коллекциях. Sorted. List Коллекция пар ключ-значение, отсортированных по ключу. Обобщенная версия Sorted. List. Данные хранятся в виде двух отдельных массивов для ключей и значений, для обоих поддерживается порядок.

Создание Hashtable ü Конструкторы (11 перегрузок + 5 (obsolete) ) : public Hashtable(); public Создание Hashtable ü Конструкторы (11 перегрузок + 5 (obsolete) ) : public Hashtable(); public Hashtable( IDictionary d); public Hashtable( int capacity); public Hashtable( IDictionary d, float load. Factor); ü Конструктор без параметров создает пустую хэш-таблицу со значениями по умолчанию для • объема (capacity ); • коэффициента заполнения (load factor). ü Объем (capacity) – предполагаемое число элементов в таблице. Увеличивается автоматически.

Создание Dictionary<TKey, Tvalue> ü Конструкторы (7 перегрузок ) : public Dictionary(); public Dictionary( IDictionary<TKey, Создание Dictionary ü Конструкторы (7 перегрузок ) : public Dictionary(); public Dictionary( IDictionary dictionary ); public Dictionary( int capacity ); ü Конструктор без параметров создает пустую хэш-таблицу со значением по умолчанию для объема (capacity ). ü В отличие от Hashtable класс Dictionary не поддерживает доступ пользователя к коэффициенту заполнения (load factor). ü В класс Dictionary добавлен большой набор методов для выполнения преобразований коллекции или ее элементов.

Коллекция Hash. Set<T> ü Версии. NET Framework 3. 5 и выше поддерживают неупорядоченную коллекцию Коллекция Hash. Set ü Версии. NET Framework 3. 5 и выше поддерживают неупорядоченную коллекцию из несовпадающих элементов. public class Hash. Set : ICollection, IEnumerable, ISerializable, IDeserialization. Callback ü Методы класса позволяют выполнять быстрые операции объединения, пересечения, проверки совпадения двух коллекций. public bool Set. Equals( IEnumerable other ); // true, если // коллекции совпадают; publi bool Overlaps( IEnumerable other ); // true, если // в коллекциях есть хотя бы один совпадающий элемент; public void Except. With( IEnumerable other ); // удаляет из // коллекции все элементы, которые есть в другой коллекции; public void Union. With( IEnumerable other ); // добавляет в // коллекцию элементы из другой коллекции (только несовпадяающие); public void Intersect. With( IEnumerable other ); // оставляет в // коллекции только элементы, которые есть и в другой коллекции;