Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23
Листинг 2.21. Удаление элемента из хеш-таблицы
Download 1.85 Mb. Pdf ko'rish
|
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев
- Bu sahifa navigatsiya:
- 2.3.5. К ЛАСС H ASHTABLE
Листинг 2.21. Удаление элемента из хеш-таблицы
public bool DelHash(string phone, out int i) { bool result = false; i = 0; if (size != 0) // таблица не пуста { int i = hashKey(phone); // вычисление индекса элемента if (h[i].info.phone == phone) // элемент найден { h[i].empty = true; result = true; size--; } else // коллизия { string FIO; int count; 17 / 23 41 i = FindHash(phone, out FIO, out count); if (i != -1) // Элемент найден. Можно удалять { h[i].empty = true; result = true; size--; } } } return result; } Eсли элемент удален, то значение функции равно true. Если элемента в таблице не было, то значение функции — false. Работающее приложение представлено на рисунке 2.2. Рис. 2.2. Заполненная хеш-таблица 18 / 23 42 2.3.5. К ЛАСС H ASHTABLE Для работы с хеш-таблицами пользователю совсем необязательно соз- давать собственные классы. Платформа .Net Framework предоставляет готовое решение – класс Hashtable, определенный в пространстве имен System.Collections . Этот класс относится к категории коллекций- словарей, т.е. коллекций, элементами которых являются пары ключ-значение. Как ключ, так и значение могут быть данными любого типа – целыми числа- ми, строками, объектами и т. д. Самыми важными качествами хорошего сло- варя являются простота добавления новых записей и быстрота получения значений. Некоторые словари организованы так, что записи добавляются в них очень быстро; другие настроены на быстрое извлечение информации. Одним из примеров словаря является хеш-таблица. Класс Hashtable имеет встроенную хеш-функцию, обращение к ко- торой происходит через вызов метода GetHashCode(Key). Для разрешения коллизий используется метод цепочек. Для хеш-таблицы класса Hashtable введено понятие коэффициента загрузки (load factor), который определяет максимальное значение отношения количества хранящихся в ней элементов данных к длине таблицы. При этом следует иметь в виду, что с каждым заня- тым элементом таблицы связана цепочка, содержащая в общем случае не- сколько элементов данных. Чем меньше коэффициент загрузки, тем выше производительность операций в хеш-таблице, но тем больше расходуется памяти. По умолчанию коэффициент загрузки равен 1.0, что, по утвержде- нию фирмы Microsoft, обеспечивает оптимальный баланс между скоростью и размером. Однако программист, создающий экземпляр класса Hashtable, может задать любой коэффициент загрузки. По мере добавления новых записей в объект Hashtable фактическая загрузка увеличивается, пока она не сравняется с коэффициентом, указанным во время создания объекта. Достигнув заданного коэффициента, объект Hashtable автоматически увеличивает длину таблицы до наименьшего простого числа, большего, чем удвоенная текущая длина. Конструктор класса имеет несколько перегрузок, позволяющих, в част- ности, создавать хеш-таблицы с размером по умолчанию, с указанным разме- ром, с указанными размером и коэффициентом загрузки и т. д. Класс Hashtable имеет свойство-индексатор, что позволяет использовать для его экземпляров нотацию массивов с ключами в качестве индексов. В табли- це 2.2 представлены основные свойства и методы класса Hashtable. 19 / 23 43 Таблица 2.2 Основные свойства и методы класса Hashtable Download 1.85 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling