2012-09-06 9 views
8

J'ai déjà rencontré un problème auquel je n'avais pas eu à faire auparavant. J'écris un correctif pour une base de données dans Java qui convertit fondamentalement les données stockées dans certaines lignes. Pour ce faire, j'ai une table de conversion qui me dit quelles valeurs deviennent quoi. Exemple, si je lis "RC", "AC", "GH" -> Mettre à jour la valeur "T1". (Ce ne sont que des exemples aléatoires, c'est essentiellement la conversion d'une chaîne à l'autre.)Remplissage d'un hashmap avec des valeurs prédéfinies (java)

J'ai besoin d'un bon moyen de stocker ces conversions. Je pensais à un hashmap: CLÉ, VALEUR: (RC, T1) (AC, T1) (GH, T1) et ainsi de suite et ainsi de suite.

Maintenant, il y en a des douzaines et des douzaines. Quelle est une bonne façon de peupler cette hashmap quand le patch s'initialise?

Répondre

18

je ferais l'initialisation lors de la configuration du HashMap

Par exemple

private static final Map<String, String> m = new HashMap<String, String>() {{ 
    put("RC", "T1"); 
    put("AC", "T1"); 
}}; 

Ensuite, vous wuld assurez-vous que tout est mis en place ensemble dans votre code.

Je pense que @Nambari fait un bon point cependant avec peut-être avoir la valeur comme une liste plutôt que juste une chaîne. Cela change vos clés et vos valeurs.

par exemple

private static final Map<String, List<String>> m = new HashMap<String, List<String>>() {{ 
    put("T1", Arrays.asList("RC", "AC"); 
}}; 
+0

Merci! C'est un peu ce que je pensais (votre premier exemple). J'espérais qu'il pourrait y avoir une façon vraiment ordonnée de le faire mais je suppose que je vais devoir descendre et salir. RNJ grandement apprécié pour la confirmation. – user1652875

+0

@ user1652875 Je pense que c'est un peu plus ordonné avec l'initialisation au même endroit que la déclaration. Ensuite, vous savez à coup sûr que la carte contient des données. – RNJ

0

Peut être autrement, Liste RC,AC,GH comme valeur et T1 comme clé pour hashmap, de cette façon vous pouvez réduire le nombre d'entrées dans la carte.

+0

Mais, la complexité d'une recherche dans une telle structure ne sera pas une bonne - comment voulez-vous chercher cette carte puis, dites lors de la recherche d'un remplaçant pour « RC »? –

+0

Je suis d'accord, c'est une approche simple si vous avez moins de clés (comme T1, T2 etc.). Si moins de clés vous pouvez obtenir entrySet() et jouer avec. Si le nombre de clés est également élevé, le temps de recherche sera élevé. Encore une fois, c'est un compromis, la simplicité à un endroit crée de la complexité à l'autre bout. – kosa

0

Vous pouvez utiliser PropertiesConfiguration de biens communs apache.

La valeur peut contenir des délimiteurs de valeur et sera interprétée comme une liste de jetons. Le délimiteur de valeur par défaut est la virgule ','. Ainsi, la définition propriété suivante

key = This property, has multiple, values 
Questions connexes