Класс HashtableПример работы с классом Hashtable: Hashtable h = new Hashtable(); h.Add("Иван Иванов", new Person("Иван", "Иванов") ); h.Add("Петр Петров", new Person("Петр", "Петров") ); h.Add("Семен Сидоров", new Person("Семен", "Сидоров") ); // Выводим фамилии персон из списка значений foreach
Слайд 1Класс Hashtable Хеширование – необратимое преобразование данных. Класс Hashtable обеспечивает работу с
парой списков: списком ключей и списком значений. Элементы списка ключей
используются для доступа к элементам списка значений (пример – поиск по ключевому слову, хеш-тегу). Список ключей хранится в свойстве Keys данного класса, а список значений – в свойстве Values. Класс Hashtable предоставляет возможность работы с каждым из указанных списков в отдельности. Заполнение хеш-таблицы осуществляется при помощи метода Add(), параметрами которого являются ключ и соответствующее ему значение (могут являться объектами любого класса, поскольку имеют тип Object).
Слайд 2Класс Hashtable Пример работы с классом Hashtable: Hashtable h = new Hashtable();
h.Add("Иван
Иванов", new Person("Иван", "Иванов") ); h.Add("Петр Петров", new Person("Петр", "Петров") ); h.Add("Семен
Сидоров", new Person("Семен", "Сидоров") );
// Выводим фамилии персон из списка значений foreach (Person p in h.Values) Console.WriteLine(p.LastName);
// Выводим список пар «ключ – значение» foreach (Object k in h.Keys) { Person p = (Person) h[k]; Console.WriteLine("Ключ: " + k + ", значение: " + p); }
Слайд 3Типизированные массивы Массивы-списки из классов ArrayList, Queue, Stack, Hashtable позволяют хранить
данные любого типа (экземпляры класса Object). Это требует осторожности при
работе с элементами массива-списка, поскольку некорректное приведение типов может вызвать ошибку работы программы. Если заранее известно, что список должен хранить объекты определённого типа, то лучше воспользоваться возможностями типизированных массивов. В этом случае работа с элементами массива упрощается, поскольку исчезает необходимость их приведения к заданному типу, а система получает возможность отслеживать корректность программного кода. Типизированные массивы могут быть объявлены при помощи следующих классов: List – однонаправленный список (текущий элемент списка содержит ссылку на следующий за ним элемент). LinkedList – двунаправленный список (текущий элемент списка содержит ссылки на предыдущий и следующий за ним элементы). Queue – классическая очередь (из элементов одного типа). Stack – классический стек (из элементов одного типа).
любой из классов List, LinkedList, Queue и Stack. В качестве типа
элементов списка может быть выбран любой известный тип данных (в том числе пользовательский класс).
После объявления переменную списка следует инициализировать: ИмяПеременнойСписка = new КлассСписка <ТипЭлементов> ();
Слайд 5Типизированные массивы Пример работы с типизированным массивом:
List arr = new
List ();
arr.Add( new Person("Иван", "Иванов") ); arr.Add( new Person("Петр", "Петров") ); arr.Add(
new Person("Семен", "Сидоров") );
arr[2].FirstName = "Станислав"; // Меняем имя персоны
// Выводим фамилии персон из списка значений foreach (Person p in arr) Console.WriteLine(p.FirstName + " " + p.LastName);
Слайд 6Типизированные массивы Из приведённого примера видно, что приведение типов при работе
с элементами типизированного массива не требуется, поскольку тип элементов был
объявлен заранее при создании списка. В результате компилятор получает возможность отслеживать корректность работы с памятью и для следующей строки выдаст ошибку: arr.Add( "Иван Иванов" ); // Ошибка
Замечание. Допускается добавление в типизированный массив наследников основного класса (в нашем примере это объекты, классы которых являются потомками класса Person). Попробуем поменять в нашем примере тип элементов массива: List