Cambiar el tamaño de la tabla de matriz en la implementación de HashMap
Esta es una pregunta simple, para aquellos que conocen la implementación interna de HashMap :)
El tamaño inicial es de 16 cubos, el factor de carga es de 0,75. Lo que significa que cuando obtiene (cuidado con esa palabra) 12, cambia de tamaño a 32 cubos.
Mi pregunta es, ¿cambia el tamaño de 16 a 32 cubos cuando obtiene 12 pares clave-valor o cuando obtiene 12 cubos 'llenos'? Lo pregunto porque podría suceder que de esos 16 depósitos, los 12 pares clave-valor se inserten en el mismo depósito. En ese caso, sería extraño cambiar el tamaño ya que otros 15 están totalmente vacíos.
Gracias, cualquier opinión sobre esto será apreciada :)
Respuestas
Como se menciona en este enlace .
Representa que el duodécimo par clave-valor de hashmap mantendrá su tamaño en 16. Tan pronto como el decimotercer elemento (par clave-valor) ingrese al Hashmap, aumentará su tamaño de 2 ^ 4 = 16 depósitos a 2 ^ 5 = 32 cubos.
Independientemente de dónde se insertó cada tecla, cuando el producto del factor de carga y la capacidad actual exceda, la tabla cambiará de tamaño.
Al HashMap no le importa cuántos depósitos se usaron hasta que se haya alcanzado el factor de carga, sabe que la probabilidad de tener colisiones es demasiado grande y el mapa debe redimensionarse. Aunque ya ocurrieron muchas colisiones.
De JavaDoc https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#put-K-V-
When the number of entries in the hash table exceeds the product of the load factor and the current capacity, the hash table is rehashed (that is, internal data structures are rebuilt) so that the hash table has approximately twice the number of buckets.
Entonces, HashMap cambia de tamaño cuando tiene 12 pares clave-valor. No es extraño, porque después de cambiar el tamaño de las entradas cambiarán su depósito.