Open KNLOD opened 6 months ago
The objects used as keys by a Hashtable are required to override the Object.GetHashCode method (or the IHashCodeProvider interface) and the Object.Equals method (or the IComparer interface).
Какой интерфейс должен реализовывать класс чтобы быть ключом (в частности метод GetHashCode): https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.iequalitycomparer?view=net-8.0
В качестве одной из реализаций можно приводить поля объекта в string и вызывать у стринга метод GetHashCode()
Пример вычисления индекса при помощи HashCode
private int calcThisKeyIndex(K key, int length)
{
return Math.Abs(key.GetHashCode() % (length));
}
Задание 1 Методы которые должна реализовывать HashMap
Для примера Интерфейс IDictionary:
https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.idictionary-2?view=net-8.0
TKey, TValue - дженерики разных типов.
Также методы необходимые для работы map под модификатором private
Свойства:
Задание 2
Написать свой класс, который будет реализовывать интерфейс IComparable, чтобы его можно было использовать в вашей реализации хеш-таблицы в качестве ключа https://learn.microsoft.com/ru-ru/dotnet/api/system.icomparable?view=net-8.0
Затем использовать данный класс в качестве ключа для каких либо значений (полет фантазии можете сделать что угодно) для примера класс пользователя и мапа которая по пользователю возвращает его возраст? (конечно в реальности никто так не делает, но чтобы разобраться в IComparable будет полезно)
Задание 3
Написать тесты для мапы, если есть силы и время можете попробовать использовать Test-Driven-Development, когда сначала пишете тест, а затем реализацию, но пока это не обязательно.
Видео по устройству и работе хеш-таблиц: https://www.youtube.com/watch?v=cWbuK7C13HQ
Пример реализации: https://github.com/EvgenyVendrov/CSharpHashMap
Про утечки памяти на примере джава (плюс минус будет похоже на #) https://habr.com/ru/companies/otus/articles/589321/