Similar presentations:
Класс Hashtable
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 – классический стек (из элементов одного типа).
4. Типизированные массивы
Объявление переменной типизированного массива-списка:КлассСписка <ТипЭлементов> ИмяПеременнойСписка;
Классом списка может выступать любой из классов List,
LinkedList, Queue и Stack.
В качестве типа элементов списка может быть выбран любой
известный тип данных (в том числе пользовательский класс).
После
объявления
переменную
списка
следует
инициализировать:
ИмяПеременнойСписка = new КлассСписка <ТипЭлементов> ();
5. Типизированные массивы
Пример работы с типизированным массивом:List <Person> arr = new List<Person> ();
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 <Object> arr = new List<Object> ();
В этом случае возникнет ошибка в строке:
arr[2].FirstName = "Станислав"; // Ошибка
Ошибку можно исправить приведением элемента к типу Person:
( (Person) arr[2]).FirstName = "Станислав";