W praktyce jest to O (1), ale w rzeczywistości jest to straszne i matematycznie bezsensowne uproszczenie. Notacja O () mówi, jak zachowuje się algorytm, gdy rozmiar problemu dąży do nieskończoności. Hashmap get / put działa jak algorytm O (1) dla ograniczonego rozmiaru. Z punktu widzenia pamięci komputera i adresowania limit jest dość duży, ale daleki od nieskończoności.
Kiedy ktoś mówi, że hashmap get / put to O (1), to naprawdę należy powiedzieć, że czas potrzebny na get / put jest mniej więcej stały i nie zależy od liczby elementów w hashmap, o ile może to być hashmap przedstawione w rzeczywistym systemie komputerowym. Jeśli problem wykracza poza ten rozmiar i potrzebujemy większych haszmapów, to po pewnym czasie z pewnością liczba bitów opisujących jeden element również wzrośnie, gdy zabraknie nam możliwych do opisania różnych elementów. Na przykład, jeśli użyliśmy hashmap do przechowywania 32-bitowych liczb, a później zwiększymy rozmiar problemu, abyśmy mieli więcej niż 2 ^ 32-bitowe elementy w hasmapie, to poszczególne elementy zostaną opisane z więcej niż 32 bitami.
Liczba bitów potrzebnych do opisania poszczególnych elementów to log (N), gdzie N to maksymalna liczba elementów, więc get i put to naprawdę O (log N).
Jeśli porównasz to z zestawem drzew, którym jest O (log n), to zestaw hash to O (long (max (n)) i po prostu czujemy, że to jest O (1), ponieważ w pewnej implementacji max (n) jest stała, nie zmienia się (wielkość przechowywanych przez nas obiektów mierzona jest w bitach), a algorytm obliczający kod skrótu jest szybki.
Wreszcie, gdyby znaleźć element w dowolnej strukturze danych O (1), stworzylibyśmy informacje z powietrza. Mając strukturę danych zawierającą n elementów, mogę wybrać jeden element na n różnych sposobów. Dzięki temu mogę zakodować informacje o bitach dziennika (n). Jeśli mogę to zakodować w bicie zerowym (to oznacza O (1)), to stworzyłem nieskończenie kompresujący algorytm ZIP.