Gestion des collisions dans une HashMap
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
Citation:
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.
Alors que si je lis la documentation:
Citation:
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.
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.
Voici le bout de code que j'utilise pour explorer les éléments de la HashMap:
Code:
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( "-----------------------" ); |
Si je regarde le contenu de ma HashMap en mode débogage, je vois que les nouvelles valeurs viennent écraser les anciennes...
Comment mettre en œuvre ce système de liste chainées qui permettrait de garder les différents éléments ?
Merci