separate probing example code java algorithm hashtable

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}.

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/Hashtable.java#Hashtable.put%28java.lang.Object%2Cjava.lang.Object%29

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.