Depende de muchas cosas. Es por lo general O (1), con un hash decente que a su vez es tiempo constante ... pero puede tener un hash que tarda mucho tiempo en calcular, y si hay varios elementos en el mapa hash que devuelven el mismo código hash, get
tendrá que iterar sobre ellos llamando al equals
en cada uno de ellos para encontrar una coincidencia.
En el peor de los casos, un HashMap
tiene una búsqueda O (n) al recorrer todas las entradas en el mismo cubo hash (por ejemplo, si todas tienen el mismo código hash). Afortunadamente, el peor de los casos no aparece muy a menudo en la vida real, en mi experiencia. Entonces, no, O (1) ciertamente no está garantizado, pero generalmente es lo que debe asumir al considerar qué algoritmos y estructuras de datos usar.
En JDK 8, HashMap
se ha modificado para que, si se pueden comparar las claves para el pedido, cualquier cubo densamente poblado se implemente como un árbol, de modo que incluso si hay muchas entradas con el mismo código hash, la complejidad es O (log n). Eso puede causar problemas si tiene un tipo de clave donde la igualdad y el orden son diferentes, por supuesto.
Y sí, si no tienes suficiente memoria para el mapa hash, estarás en problemas ... pero eso será cierto independientemente de la estructura de datos que uses.
Es posible que desee buscar el concepto de complejidad amortizada. Vea por ejemplo aquí: stackoverflow.com/questions/3949217/time-complexity-of-hash-table La peor complejidad de caso no es la medida más importante para una tabla hash –
Correcto - está _amortizado_ O (1) - nunca olvide que primera parte y no tendrás este tipo de preguntas :) –