В C# нет класса с именем «HashMap», в отличие от Java. Однако класс Dictionary<TKey, TValue>
предоставляет аналогичную функциональность и является рекомендуемым подходом для операций с хеш-таблицами.
Содержание
- Использование
Dictionary<TKey, TValue>
как хеш-таблицы - Расширенное использование и рекомендации
- Заключение
Использование Dictionary<TKey, TValue>
как хеш-таблицы
Dictionary<TKey, TValue>
предлагает хранилище ключ-значение со средней временной сложностью O(1) для распространенных операций, таких как вставка, удаление и извлечение. TKey
задает тип ключа, а TValue
определяет тип связанного значения. Давайте рассмотрим его использование:
Создание и заполнение словаря:
// Создаем словарь для хранения строк в качестве ключей и целых чисел в качестве значений.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
// Добавляем пары ключ-значение с помощью Add()
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);
// Или используем синтаксис инициализатора коллекции:
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
{"grape", 4},
{"orange", 5}
};
Доступ к значениям:
Извлекайте значения, используя их ключи. TryGetValue()
более безопасен, чем прямой доступ по индексу, обрабатывая случаи отсутствия ключа:
int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
Console.WriteLine($"Количество яблок: {appleCount}"); // Вывод: Количество яблок: 1
}
else
{
Console.WriteLine("Яблоки не найдены.");
}
// Прямой доступ (выбрасывает KeyNotFoundException, если ключ отсутствует)
try
{
Console.WriteLine($"Количество бананов: {myDictionary["banana"]}"); // Вывод: Количество бананов: 2
}
catch (KeyNotFoundException)
{
Console.WriteLine("Ключ не найден.");
}
Итерация по словарю:
Console.WriteLine("Содержимое словаря:");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
Console.WriteLine($"Ключ: {kvp.Key}, Значение: {kvp.Value}");
}
Удаление элементов:
myDictionary.Remove("banana");
Проверка наличия ключа:
if (myDictionary.ContainsKey("cherry"))
{
Console.WriteLine("Вишня существует.");
}
Расширенное использование и рекомендации
В сценариях, требующих потокобезопасности, рассмотрите ConcurrentDictionary<TKey, TValue>
. При выборе ключей убедитесь, что они правильно реализуют GetHashCode()
и Equals()
, чтобы избежать коллизий и поддерживать эффективность хеш-таблицы. Понимание этих аспектов имеет решающее значение для оптимальной производительности.
Заключение
Dictionary<TKey, TValue>
в C# является эффективным аналогом HashMap, обеспечивая отличную производительность для хранения пар ключ-значение. Его универсальность в сочетании с наличием потокобезопасных альтернатив делает его фундаментальной структурой данных для различных приложений C#.