Bonjour,
au jour d'aujourd'hui, j'utilise un jeu de HashMap pour représenter/stocker le contenu d'un fichier INI.
Juste là, pas de soucis : une HashMap pour stocker les sections, les sections étant elles mêmes stockées sous forme de HashMap, ces dernières stockant les paires clef/valeur.

Néanmoins, j'ai fait la bêtise d'oublier le cas suivant, un fichier INI du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
[foo]
c1
c2
[bar]
.....
[foo]
c3
c4
Ben oui, une section (ici foo) peut être éclatée à travers tout le fichier.

A première vue cela ne pose pas problème : je peux toujours remplir mes HashMap, je me retrouverai donc avec la grande HashMap contenant les clefs "foo" et "bar", la sous-HashMap correspondant à "foo" stockant les 4 clefs c1 à c4.
Mon jeu de HashMap est du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
private Map<String, 
                Map<String, 
                    GConIniEntry>> contentTable;
(où GConIniEntry est un objet contenant la valeur de la clef, mais d'autres infos/méthodes qui -dans ce sujet- n'ont aucun intérêt)

Mais voilà, il faut à tout prix que mon jeu de HashMap soit à l'image de mon fichier : en parcourant mon jeu de HashMap, je dois être capable de reconstituer le fichier INI. Or, pour l'instant, le fichier INI que je pourrais reconstituer ressemblerait plutôt à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
[foo]
c1
c2
c3
c4
[bar]
...
et ça je n'en veux pas, mais alors pas du tout du tout .

Bref, je cherche - si possible dans les paquetages standards, un moyen d'avoir une Map ou Dictionnary qui me permette d'avoir non seulement des doublons, mais aussi de stocker ces doublons à des endroits différents de cette Map ou Dictionnary. Biensûr, avec les méthodes get/set permettant de manipuler les occurrences de ces doublons (et pas seulement le premier).
Je parle de HashMap & co car il me faut de très bonnes performances, et surtout constantes (la lecture du dernier enregistrement doit être aussi rapide que la lecture du premier).

Aussi, les paquetages de Jakarta-commons-collections pourraient m'aider (la classe HashBag a l'air de gérer les doublons, mais subsiste le soucis de doublons à des positions différentes), mais j'essaie d'éviter les dépendances : je conçois une bibliothèque dont l'un des objectif est une légèreté maximale, dont zéro dépendances.
En dernier recours, je développerai la classe moi-même, mais bon si ça existe déjà ...


Merci d'avoir pris le temps de lire ce gros bazar