Bonsoir,

je souhaiterai connaitre les véritables différences entre Hashtable et HashMap (mise à part que ce soit synchronisé).

Pour vous indiquer par où je veux en venir, je vais vous exposer mon problème. Actuellement je travaille sur un calcul d'itinéraire et je dois stocker sous forme de table de hashage mes arêtes qui sont leurs propres clés (deux arêtes sont identiques si elles décrivent le même parcours, j'ai redéfini le equals et le hashcode), ce qui me permet de faire évoluer les propriétés d'une seule arête lorsque cette arrête est défini par des arêtes de catégories différentes (une route est aussi un tunnel).

J'ai eu des soucis de performances, je trouvais les temps de chargement très long. Comme beaucoup d'objet sont utilisés (graphe de 20000 objet par exemple) j'ai optimisé à fond les méthodes equals et hashcode (le hashcode est calculé à la création de l'objet, il ne peut pas évoluer. Cela consomme de la mémoire mais les temps d'accès sont beaucoup plus rapide). J'ai vu des améliorations mais pas si significatif...

Je me suis intéressé au hashmap que j'utilisais pour gérer mes arêtes. Je l'ai remplacé par une hashtable. Je suis passé de, pour 20000 objet, 40 secondes de chargement de données à 5 secondes (avec le même code autour), ce qui fait une énorme différence. J'ai demandé aux développeurs avec qui je travaille mais, mise à part que tout le monde était étonné du résultat, personne n'a su me dire comment ça se faisait.

J'ai lu dans certains forums qu'il était préférable d'utiliser une hashmap qu'une hashtable (et que cette dernière ferait mieux d'être déprécié) mais le résultat est là. Il semblerait que la hashtable soit beaucoup plus performante qu'une hashmap. A moins de n'avoir fait une erreur de conception où d'avoir trouvé une astuce...