recorrer metodos example entre diferencia java performance hashmap

java - metodos - Límite teórico para el número de claves(objetos) que se pueden almacenar en un HashMap?



metodos de hashmap java (4)

¿Existe un límite teórico para el número de entradas clave que se pueden almacenar en un HashMap o simplemente depende de la heapmemory disponible?

Mirando la documentación de esa clase , diría que el límite teórico es Integer.MAX_VALUE (2 31 -1 = 2147483647) elementos.

Esto se debe a que para implementar correctamente esta clase, el método size() está obligado a devolver un int representa el número de pares clave / valor.

De la documentación de size()

Devuelve: el número de asignaciones de clave-valor en este mapa

Nota: esta pregunta es muy similar a la cantidad de datos que una lista puede contener al máximo .

¿Qué estructura de datos es la mejor para almacenar una gran cantidad de objetos (digamos varios cientos de miles de objetos)?

Yo diría que depende de lo que necesita almacenar y qué tipo de acceso necesita. Todas las colecciones integradas probablemente estén bien optimizadas para grandes cantidades.

¿Existe un límite teórico para el número de entradas clave que se pueden almacenar en un HashMap o simplemente depende de la memoria de montón disponible?

Además, ¿qué estructura de datos es la mejor para almacenar una gran cantidad de objetos (digamos varios cientos de miles de objetos)?


Estoy de acuerdo con @ Bozho y también agregaré que debes leer el Javadoc en HashMap cuidadosamente. Tenga en cuenta cómo se analiza la capacidad inicial y el factor de carga y cómo afectarán el rendimiento de HashMap.

HashMap está perfectamente bien para mantener grandes conjuntos de datos (siempre y cuando no se queden sin llaves ni memoria) pero el rendimiento puede ser un problema.

Es posible que necesite buscar cachés / cuadrículas de datos distribuidos si no puede manipular los conjuntos de datos que necesita en un solo programa Java / JVM.


No hay un límite teórico, pero existe un límite de cubos para almacenar diferentes cadenas de entrada (almacenadas bajo una nueva clave hash). Una vez que alcances este límite, cada nueva adición dará como resultado una colisión hash, pero esto no es un problema a excepción del rendimiento ...


HashMap mantiene los valores en una matriz, que puede contener hasta Integer.MAX_VALUE . Pero esto no cuenta colisiones. Cada Entry tiene un next campo, que también es una entrada. Así es como se resuelven las colisiones (dos o más objetos con el mismo código hash). Así que no diría que hay un límite (aparte de la memoria disponible)

Tenga en cuenta que si supera Integer.MAX_VALUE , obtendrá un comportamiento inesperado de algunos métodos, como size() , pero get() y put() seguirán funcionando. Y funcionarán, porque el hashCode() de cualquier objeto devolverá un int , por lo tanto, por definición, cada objeto encajará en el mapa. Y luego cada objeto colisionará con uno existente.