Próbuję zrozumieć, jak Hashtables działają w języku C#. Przeczytałem artykuł MSDN i rozumiem, że C# Hashtables używa 'rehashing' dla kolizji, tj. Jeśli spróbuję wstawić parę klucz/wartość do tablicy, jeśli użycie HashFunction H1 spowoduje kolizję, to spróbuje HashFunction H2, H3 itd., dopóki nie zostaną znalezione żadne kolizje.Hashtable kolizja rehashing - jak czytać wartości?
MSDN cytat:
Hashtable klasa wykorzystuje inną technikę zwaną rehasing. (Niektóre źródła odnoszą się do hashuje jako podwójne mieszaja.)
prace hashuje następująco: jest to zbiór różnych hash funkcji, H1 ... Hn, a podczas wkładania lub pobierania elementu z tabeli mieszania, początkowo używana jest funkcja skrótu H1. Jeśli doprowadzi to do kolizji, zamiast tego zostanie wypróbowana metoda H2, aw razie potrzeby zostanie zwiększona do wartości Hn. W poprzedniej sekcji pokazano tylko jedną funkcję skrótu, która jest początkową funkcją haszującą (H1) . Pozostałe funkcje skrótu są bardzo podobne do tej funkcji, różnicując je tylko przez współczynnik multiplikatywny. W ogólnym funkcja mieszająca Hk jest zdefiniowany jako:
Hk (element) = [GetHash (element) + k * (1 + (((GetHash (key) 5 >>) +1)% (hashsize - 1)))]% hashsize
Jednakże, biorąc przykład z site1 MSDN:
private static Hashtable employees = new Hashtable();
public static void Main()
{
// Add some values to the Hashtable, indexed by a string key
employees.Add("111-22-3333", "Scott");
employees.Add("222-33-4444", "Sam");
}
Załóżmy, że dodanie drugiego klawisza spowoduje kolizji, więc H2 będą musiały być używany. Jednak, kiedy dzwonię do pracowników ["222-33-4444"], w jaki sposób hakowiec wie, jak używać H2? Czy istnieje oddzielne mapowanie? Dzięki.
Jeśli odwołujesz się do linku, powinieneś go uwzględnić. –