En plus de tous les autres bons commentaires:
Les tables de hachage en général ont un meilleur comportement de cache nécessitant moins de mémoire par rapport à un lectures arbre binaire. Pour une table de hachage vous engager normalement une seule lecture avant d'avoir accès à une référence tenant vos données. L'arbre binaire, si elle est une variante équilibrée, exige quelque chose dans l'ordre de k * lg (n) mémoire lit pour une constante k.
D'autre part, si un ennemi connaît votre fonction de hachage l'ennemi peut appliquer votre table de hachage pour produire des collisions, ce qui entrave considérablement ses performances. La solution est de choisir la fonction de hachage au hasard d'une famille, mais un BST n'a pas cet inconvénient. En outre, lorsque la pression de la table de hachage augmente trop, vous avez souvent tendance à enlargen et réallouer la table de hachage qui peut être une opération coûteuse. Le BST a un comportement plus simple ici et ne tend pas à attribuer tout à coup un grand nombre de données et faire une opération de ressasser.
Les arbres ont tendance à être la structure de données moyen ultime. Ils peuvent agir comme des listes, peut facilement être divisé pour le fonctionnement en parallèle, ont le retrait rapide, insertion et recherche de l'ordre de O (logn) . Ils ne font rien particulièrement bien, mais ils n'ont ni aucun comportement trop mauvais.
Enfin, BSTS sont beaucoup plus faciles à mettre en œuvre dans les langages fonctionnels (pures) par rapport aux tables de hachage et ils ne nécessitent pas de mises à jour destructrices à mettre en œuvre (la persistance ces arguments par Pascal ci - dessus).