Si puede salirse con la suya, siempre debe preferir un hash sobre un árbol de búsqueda binario. Hashes tiene una memoria superior más alta que los árboles, pero toda la memoria que están utilizando se puede asignar en un bloque grande. Para los árboles, cada nodo agregado requiere una asignación separada que provoca una gran fragmentación y es malo para el rendimiento. De forma similar, preferiría leer 1000 bytes de 1 archivo en lugar de 1 byte de 1000 archivos diferentes.
El caso en el que hashes no funciona es cuando el orden importa. Por ejemplo, suponga que está escribiendo un asignador de memoria y almacena bloques de memoria libres en una estructura de datos. Las claves son los tamaños de los bloques y los valores son los indicadores para ellos.
Una solicitud de memoria implica consultar esta estructura de datos y encontrar el bloque más pequeño (¡implica pedir!) Que satisface la solicitud. Por ejemplo, si tiene bloques con las teclas 10, 20, 30 y aparece una solicitud de 20 bytes de memoria, seleccione el segundo bloque. Un hashmap puede hacer eso fácilmente.
Pero, ¿y si la solicitud es para 22 bytes? Como no hay una clave con el valor 20, debe iterar todo el hashmap para encontrar la tecla derecha (30) que es una operación O (n). Pero si ha usado un árbol, entonces, para "encontrar la clave más pequeña más grande que una tecla dada", es una operación O (log n).
posible duplicado de [Árboles binarios vs. Listas vinculadas vs. Tablas hash] (http://stackoverflow.com/questions/371136/binary-trees-vs-linked-lists-vs-hash-tables) –