Estaba mirando implementación de HashMap y tropecé con esta línea de código donde se establece la capacidad inicial predeterminada:

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

¿Por qué se usa un desplazamiento de bits aquí en lugar de simplemente inicializar DEFAULT_INITIAL_CAPACITY con 16? He mirado otras clases como Arrays y allí, también, se inicializa un valor con un desplazamiento de bits:

private static final int MIN_ARRAY_SORT_GRAN = 1 << 13;

¿Es algo convencional o es más importante para alguien que trabaja con estas implementaciones saber qué número binario son los valores en lugar de la representación decimal?

1
tim-kt 22 ene. 2021 a las 16:32

1 respuesta

La mejor respuesta

Porque a veces es más fácil razonar con el número de bits que con rangos numéricos. En el caso de HashMap, sin embargo, otra razón es que necesita hacer hash % numberOfBuckets, la operación de módulo es costosa, por lo que para fijar uno puede usar una potencia de dos, luego el módulo puede reemplazarse con AND lógico: hará lo mismo, pero funciona de esa manera solo para potencias de dos. El caso Arrays - pueden ser razones similares.

2
Andrew Vershinin 22 ene. 2021 a las 13:36