Bonjour,
il y a un truc qui m'échappe dans la gestion des collisions avec une HashMap.
J'y stocke des tableaux byte[] dont les emplacements sont distribués à l'aide de HashCode issu du contenu de chaque tableau.
J'ai besoin qu'en cas de collision, le nouveau tableau s'inscrit dans ma HashMap sans écraser le tableau y figurant déjà.
D'après ce que j'ai cru comprendre en lisant l'excellent ouvrage de Jean-Michel DOUDOUX: https://jmdoudoux.developpez.com/cou...#collections-5
Alors que si je lis la documentation:Si deux objets possèdent la même valeur de hachage, il y a une collision car les deux objets doivent être insérés dans le même bucket. Pour gérer les problèmes, le bucket contient une liste chaînée*: chaque élément (sa clé et sa valeur) est encapsulé dans une instance de type Entry.
En entrant manuellement des paires <Cle, Valeur> dans une HashMap, et en provoquant des collisions, je ne vois pas de liste chaînée de paires, qui me permette de garder les éléments en collision.public*V*put(K*key, V*value)
Associates the specified value with the specified key in this map. If the map previously contained a mapping for the key, the old value is replaced.
Voici le bout de code que j'utilise pour explorer les éléments de la HashMap:
Si je regarde le contenu de ma HashMap en mode débogage, je vois que les nouvelles valeurs viennent écraser les anciennes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for ( Iterator iter = maHashMapSolutions.entrySet().iterator(); iter.hasNext(); ) { Entry entry = (Entry)iter.next(); System.out.println( "Clé: " + entry.getKey() + " _ Valeur: " + Arrays.toString( (byte[])entry.getValue())); } System.out.println( "-----------------------" );
Comment mettre en œuvre ce système de liste chainées qui permettrait de garder les différents éléments ?
Merci
Partager