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:
0x7FFFFFFFes 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.lengthestará 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.