metodos examples example ejemplo create java hashmap capacity

examples - hashmap java example



¿Por qué es la capacidad máxima de un Java HashMap 1<< 30 y no 1<< 31? (4)

Estás pensando en unsigned, con rango superior con signo es (2 ^ 31) -1

¿Por qué es la capacidad máxima de un Java HashMap 1 << 30 y no 1 << 31, a pesar de que el valor máximo de un int es 2 31 -1? La capacidad máxima se inicializa como static final int MAXIMUM_CAPACITY = 1 << 30;


Java usa enteros con signo, lo que significa que el primer bit se usa para almacenar el signo del número (positivo / negativo).

Un entero de cuatro bytes tiene 32 bits en los que la porción numérica puede abarcar solo 31 bits debido al bit de firma. Esto limita el rango del número a 2 ^ 31 - 1 (debido a la inclusión de 0) a - (2 ^ 31) .


Por defecto, el tipo de datos int es un entero complementario de dos firmado de 32 bits , que tiene un valor mínimo de -2^31 y un valor máximo de (2^31)-1 , oscila entre -2,147,483,648 y 2,147,483,647.

El primer bit está reservado para el bit de signo, es 1 si el número es negativo y 0 si es positivo.

1 << 30 es igual a 1,073,741,824
su entero binario de complemento de dos es 01000000-00000000-00000000-00000000.

1 << 31 es igual a -2,147,483,648 .
su entero binario del complemento de dos es 10000000-00000000-00000000-00000000.

Dice que el tamaño máximo que puede expandir hash-map es 1,073,741,824 = 2 ^ 30.


Si bien es posible que un mapa hash maneje cantidades de elementos entre 2 ^ 30 y 2 ^ 31-1 sin tener que usar tipos enteros más grandes, es difícil escribir código que funcione correctamente incluso cerca de los límites superiores de los tipos enteros de un idioma. Además, en un lenguaje que trata los enteros como un anillo algebraico abstracto que "se ajusta" al desbordamiento, en lugar de como números que deberían arrojar resultados numéricamente correctos o arrojar excepciones cuando no pueden hacerlo, puede ser difícil asegurarse de que no existan. En los casos en que los desbordamientos causarían que operaciones no válidas pasen desapercibidas.

Especificar un límite superior de 2 ^ 30 o incluso 2 ^ 29, y asegurar un comportamiento correcto en cosas que no sean más grandes que eso, a menudo es mucho más fácil que tratar de garantizar un comportamiento correcto hasta 2 ^ 31-1. Sin una razón particular para exprimir hasta el último bit de rango, generalmente es mejor usar el enfoque más simple.