java - studio - programacion android pdf 2018



¿Por qué se implementa el tamaño de la forma en que es? (1)

Tengo varias preguntas sobre la reconstrucción de HashMaps al agregar un nuevo par clave-valor. Haré preguntas basadas en estos hechos (son ciertas para Oracle JVM, no estoy seguro de si son correctas para otras JVM):

  1. Redimensionar reconstruye HashMap para tener una matriz de tabla interna más grande cada vez que crezca HashMap mayor que el umbral (threshold = loadFactor * numberOfEntries). No importa en qué cubo se encuentre la Entrada recién creada: el mapa seguirá creciendo. Incluso si todas las entradas entran en un cubo (es decir, sus claves ' hashCode() devuelven el mismo número).
  2. HashMap no se contrae cuando se eliminan los datos. Incluso si todas las claves se eliminan de HashMap , el tamaño interno de la tabla no cambia.

Ahora las preguntas:

  1. ¿Son estos hechos correctos?

Si lo son, entonces:

  1. ¿Por qué cambiar el tamaño implementado de esta manera? ¿Es la intención de hacer crecer la mesa interior incluso cuando obviamente no es necesario? O un error?
  2. ¿Por qué no se reduce?

Sí, estos hechos son correctos.

  1. Detectar si es "obviamente no necesario" tomaría mucho tiempo, y casi siempre es redundante, ya que el caso donde todas las claves tienen el mismo código hash es raro. En resumen, está pagando un gasto importante (rastreando qué tan común es un código hash en particular) para todo el mundo solo para ahorrar algo de trabajo en un caso extremadamente raro, que terminará costando más de lo que ahorra.
  2. Debido a que la eliminación es una operación algo menos común, y generalmente se sigue rellenando el mapa. Si desea comenzar el mapa con una tabla más pequeña, puede asignarlo a un new HashMap y dejar que el anterior sea recolectado.




resize