技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

java:Hashmapで1つのキーで複数の値を結びつける方法

HashMapとは、「キー、値」の組み合わせでデータを保持することができるクラスのことです。
このクラスを用いれば、キーに紐づく値を検索することが可能になります。
 
しかし、キーに対応する値が複数の場合は、一工夫する必要があります。
私が趣味で作っているプログラムでそのようなケースがあったので、どのように工夫したのかをサンプルコードとして残します。
今回は、「値」をStringで定義し、区切り文字を使って複数の値を結びつけ、参照する際はStringクラスのsplit関数を用いて分割するということをしています。
 
ちなみに、値には配列等の構造を持つオブジェクトを指定することも可能です。
もう少し複雑な状況では、値としてそのようなオブジェクトを指定した方が良いでしょう。
 
【サンプルコード(変数名等を加工した後、該当箇所のみ抜き出し)】



/* 変数定義 */
String magicType;
int magicPower;
double magicHitProbability;
int magicMP;
String magicEffectCode;

/* HashMap定義(魔法一覧) */
HashMap<String, String> magicMap = new HashMap<String, String>();
magicMap.put("Fire1", "fire|40|90|3|00");
magicMap.put("Fire2", "fire|80|90|6|00");
magicMap.put("Fire3", "fire|120|90|10|00");



magicMap.put("BigBang", "fire|250|100|30|7D");
magicMap.put("AbsoluteTemperature", "ice|250|100|30|7E");
magicMap.put("AbsoluteLightning", "electric|500|70|30|7F");

/* 魔法の性能取得 */
String magicInfo = magicMap.get(magicName[i]);
if (magicInfo == null) {
    // 例外処理(省略)
} else {
    String[] magicInfoSplit = magicInfo.split("\\|", 0);
    magicType = magicInfoSplit[0];
    magicPower = Integer.parseInt(magicInfoSplit[1]);
    magicHitProbability = Double.parseDouble(magicInfoSplit[2]);
    magicMP = Integer.parseInt(magicInfoSplit[3]);
    magicEffectCode = magicInfoSplit[4];
}