АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.

Презентация:



Advertisements
Похожие презентации
Ассоциативные списки Поиск данных происходит не по индексу или положению объекта, а по его ассоциативной связи: public interface Map { // Доступ к объектам.
Advertisements

Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Коллекции классов Лекция 12. С помощью коллекций вместо создания структур данных программист использует готовые структуры данных, не заботясь об их реализации.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Коллекции Итераторы Лекция 6. Коллекции Итераторы.
Высокоуровневые методы информатики и программирования Лекция 15 Коллекции.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
ИТЕРАТОРЫ И LINQ Лекция 1. Интерфейс IEnumerable и IEnumerator Любая коллекция реализует интерфейс IEnumerable. public interface IEnumerable : IEnumerable.
Высокоуровневые методы информатики и программирования Лекция 14 Интерфейсы.
В С# предусмотрены средства для создания пользовательских классов-контейнеров, к внутренним элементам которых можно обращаться при помощи того же оператора.
ПОЛИМОРФИЗМ Лекция 3 1. π ολυμορφισμός 2 Полиморфизм кристаллов – углерод: графит, алмаз. Гендерный полиморфизм – человек: мужчина, женщина. Полиморфизм.
1 ©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Коллекции Во многих приложениях требуется создавать группы связанных объектов и управлять этими группами. Существует два способа группировки объектов:
Делегаты Как созданные объекты могут посылать сообщения тем объектам, которые их породили? При программировании под Windows на С и C++ основное средство.
Обобщения ( generics) Обобщения – это классы, структуры, интерфейсы и методы, в которых некоторые типы сами являются параметрами. Эти типы перечисляются.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
EXtreme Programming XP Тема 3. XP Пусть есть некоторая информационная система для банков. В качестве основной валюты для расчетов используется доллар,
КоллекцииИтераторы Типы, допускающие неопределенное значение Обработка исключений Лекция 5.
Универсальность. Классы с родовыми параметрами. Под универсальностью (genericity) понимается способность класса объявлять используемые им типы как параметры.
Транксрипт:

АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1

Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В ассоциативной коллекции элементы идентифицируются уникальными ключами произвольного типа – числа, строки, пользовательские классы, … Но у всех коллекций есть нечто общее, и это общее – интерфейсы.

Интерфейсы коллекций 3 GetEnumerator() Count this[int] Add(), Remove()…

Интерфейс IDictionary 4 K V public struct KeyValuePair { public KeyValuePair(TKey key, TValue value); public TKey Key { get; } public TValue Value { get; } public override string ToString(); } public interface IDictionary : ICollection > { ICollection Keys { get; } ICollection Values { get; } TValue this[TKey key] { get; set; } void Add(TKey key, TValue value); bool ContainsKey(TKey key); bool Remove(TKey key); bool TryGetValue(TKey key, out TValue value); }

Классы ассоциативных коллекций HashTable Dictionary SortedDictionary 5 К2К1К3

Хэш-таблица 6 Add ress Key (Год) Value 01980Smalltalk 11991Python NET Java Запись 1.Хешируем ключ и получаем адрес. 2.Если адрес свободен, записываем. 3.Если занят, рехешируем ключ. 4.goto 2. Чтение 1.Хешируем ключ и получаем адрес. 2.Если адрес свободен, значения нет. 3.Если занят, сверяем ключи 4.Если ключи совпали, читаем 5.Если не совпали, рехешируем ключ. 6.goto 2

Хэш-таблица 7 Add ress Key (Год) Value 01980Smalltalk 11991Python NET 31990Python Java Удаление 1.Определяем адрес, как для чтения. 2.Помечаем ключ как удаленный.

Пример: Частотный словарь 8 private static Dictionary CreateDictionary(string[] words) { Dictionary dict = new Dictionary (); foreach (string word in words) { if (dict.ContainsKey(word)) dict[word]++; else dict[word] = 1; } return dict; } Задан текст (массив слов). Составить для него частотный словарь.

Эквивалентность в.NET 9 Объекты, которые служат ключами в ассоциативных коллекциях, должны допускать операцию проверки эквивалентности. Строки, числа, символы допускают проверку эквивалентности. В пользовательских объектах операцию эквивалентности необходимо объявлять.

Метод Object.Equals() 10 В классе Object есть виртуальный метод bool Equals(object o), он считает объект эквивалентным только самому себе. Если программиста не устраивает такая семантика, он должен перекрыть этот метод в своем классе. Например, для класса Point это может быть сделано так. public override bool Equals(Object obj) { // Если параметр равен null, возвращаем false. if (obj == null) return false; // Если параметр не приводится к Point, возвращаем false. Point p = obj as Point; if ((System.Object)p == null) // антицикл return false; // Возвращаем true, если поля равны. return (x == p.x) && (y == p.y); } Замечание. Закрытые поля p.x, p.y видны так же, как и this.x, this.y.

Равна ли точка цветной точке? 11 class Point { public int X, Y; } class ColPoint: Point { public Color C; } Эквивалентными считаются только однотипные объекты. В противном случае ожидаются парадоксы, т.е. из A == B и B == C будет следовать, что A == C. Свойства эквивалентности: Рефлексивность Симметричность Транзитивность

Эквивалентность в.NET 12 Кроме метода Equals(), в классе Object есть еще два статических метода: public static bool ReferenceEquals(object objA, object objB); public static bool Equals(object objA, object objB); и метод public virtual int GetHashCode(); Порядок определения пользовательской эквивалентности: 1)перекрываем метод экземпляра Equals(); 2)перекрываем метод экземпляра GetHashCode(); 3)остальные методы не трогаем.

Операции == и != 13 Вместе с перегрузкой метода Equals() нужно пергружать не только GetHashCode(), но и операции сравнения.

Самостоятельно 14 1.Разработайте класс «Телефонный справочник», который бы мог хранить произвольное количество абонентов. Для каждого абонента известна фамилия и один номер телефона. Фамилии разных абонентов могут быть одинаковыми, номера телефонов – нет. Справочник должен выполнять поиск номеров телефонов по фамилии и поиск фамилии по номеру телефона 2.Сделайте класс Point способным выполнить роль ключа в ассоциативной коллекции. 3.Унаследуйте List и добавьте в наследник проверку эквивалентности. Коллекции считаются эквивалентными, если состоят из попарно эквивалентных элементов.