На практиці це O (1), але це насправді жахливе і математично нерозуміле спрощення. Позначення O () говорить про те, як поводиться алгоритм, коли розмір проблеми має тенденцію до нескінченності. Hashmap get / put працює як алгоритм O (1) для обмеженого розміру. Обмеження досить велике з пам'яті комп'ютера та з точки зору адресації, але далеко не нескінченне.
Коли можна сказати, що get / put hashmap - це O (1), то дійсно слід сказати, що час, необхідний для get / put, є більш-менш постійним і не залежить від кількості елементів у хешмапі, наскільки може бути хешмап представлені на власне обчислювальній системі. Якщо проблема виходить за рамки цього розміру і нам потрібні більші хешмапи, через деякий час, безсумнівно, кількість бітів, що описують один елемент, також збільшиться, коли у нас вичерпаються можливі описані різні елементи. Наприклад, якщо ми використовували хеш-карту для зберігання 32-бітових чисел і пізніше збільшуємо розмір проблеми, щоб у нас було більше 2 ^ 32 бітових елементів у хешмапі, то окремі елементи будуть описані з більш ніж 32 бітами.
Кількість бітів, необхідних для опису окремих елементів, це log (N), де N - максимальна кількість елементів, тому get і put є дійсно O (log N).
Якщо ви порівнюєте його з набором дерева, який є O (log n), то хеш-набір - O (long (max (n)), і ми просто відчуваємо, що це O (1), тому що за певної реалізації max (n) є фіксованим, не змінюється (розмір об'єктів, які ми зберігаємо, вимірюється в бітах) і алгоритм обчислення хеш-коду швидкий.
Нарешті, якщо пошук елемента в будь-якій структурі даних був O (1), ми створювали б інформацію з повітря. Маючи структуру даних n елемента, я можу вибрати один елемент по-різному. З цим я можу кодувати бітову інформацію журналу (n). Якщо я можу кодувати це в нульовому біті (саме це означає O (1)), тоді я створив нескінченний стискаючий алгоритм ZIP.