На практике это O (1), но на самом деле это ужасное и математически бессмысленное упрощение. Обозначение O () говорит о том, как алгоритм ведет себя, когда размер проблемы стремится к бесконечности. Получение / размещение Hashmap работает как алгоритм O (1) для ограниченного размера. Предел довольно велик с точки зрения памяти компьютера и с точки зрения адресации, но далеко не бесконечен.
Когда кто-то говорит, что получение / размещение хэш-карты равно O (1), на самом деле следует сказать, что время, необходимое для получения / размещения, является более или менее постоянным и не зависит от количества элементов в хэш-карте, если хэш-карта может быть представлен на реальной вычислительной системе. Если проблема выходит за пределы этого размера, и нам нужны более крупные хэш-карты, то через некоторое время, безусловно, количество битов, описывающих один элемент, также увеличится, поскольку у нас закончатся возможные описываемые различные элементы. Например, если мы использовали хэш-карту для хранения 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 разными способами. Благодаря этому я могу кодировать информацию о логах (n) битах. Если я могу закодировать это в нулевом разряде (это то, что означает O (1)), я создал алгоритм бесконечного сжатия ZIP.