example - linear probing hash table java
¿Por qué Java utiliza(hash y 0x7FFFFFFF)% tab.length para decidir el índice de una clave? (3)
Porque -1 % 10 == -1
que ciertamente no desea para indexar en una matriz. Forzar el bit de signo a 0 evita este problema.
Por el enlace a continuación, sé que Java utiliza (hash & 0x7FFFFFFF) % tab.length
para decidir en qué ranura de una matriz colocar la {clave, el valor}.
Mi pregunta es ¿por qué Java primero hace hash y 0x7FFFFFFF? ¿Hay algún propósito en particular?
Porque:
0x7FFFFFFF
es 0111 1111 1111 1111 1111 1111 1111 1111: todos 1 excepto el bit de signo.(hash & 0x7FFFFFFF)
resultará en un entero positivo.(hash & 0x7FFFFFFF) % tab.length
estará en el rango de la longitud de la pestaña.
Tenga en cuenta que Hashtable
está más o menos desactualizado y fue reemplazado por HashMap
. Este utiliza hash & (table.length-1)
para lograr el mismo propósito.
También hace un poco de cambio antes como se puede ver here . Esto es para hacer frente a implementaciones hashCode()
método hashCode()
que devuelve números con una diversidad baja.