Una tabella hash contiene alcune parti ordinate, come l'elenco di bucket, ma raramente le accedi in quell'ordine perché quell'ordine ha poca o nessuna correlazione con nessuna parte utile dei tuoi dati.
Supponiamo di voler archiviare molte stringhe. Se il tuo obiettivo è quello di estrarre efficientemente la stringa 73 (o altra scelta arbitrariamente), allora potresti usare un array, che è ordinato. Quindi ottenere la 73ª stringa è questione di fare riferimento direttamente all'elemento 73rd dell'array.
Tuttavia, il tuo obiettivo è determinare in modo efficiente se una determinata stringa è presente nel tuo set. Se si dispone di un array non ordinato, è necessario cercare tra tutte le stringhe. Se si dispone di un array ordinato, è necessario ordinare il log (n) delle stringhe, che è meglio ma non eccezionale. Quindi la soluzione è una tabella hash.
Ingenuità ... Si crea una matrice con 256 voci (ciascuna che rappresenta un carattere), ciascuna che punta a un elenco o una serie di stringhe che iniziano con quel carattere. Ora, se vuoi scoprire se "Bob" è nel tuo set di stringhe, salta immediatamente al bucket "B" e guarda solo attraverso quelle stringhe.
Ovviamente, questo esempio significa ancora che le stringhe vengono fuori in ordine alfabetico, il che suona bene, ma nel mondo reale si usa una funzione di hash più complessa di "il primo carattere", preferibilmente una che distribuisce le stringhe in modo uniforme il più possibile tra i tuoi secchi. Il risultato è che semplicemente leggendo la tua tabella hash in ordine darai un ordine pseudo-casuale delle tue stringhe.