作り方自体はもうこれ書いてあるままじゃねえか!という話でしか無いんですけど
Map<String, Map<String,Integer>> map = new HashMap<String, Map<String,Integer>>();
map.put("京都", new HashMap<String,Integer>());
map.get("京都").put("舞鶴", 10000);
map.put("東京", new HashMap<String,Integer>());
map.get("東京").put("渋谷", 1000);
map.get("東京").put("秋葉原", 2000);
これでHashMapを値に持つHashMap(分かりづらい)が出来る。
複数キーを使うときはgetを2個重ねればOK。
ここから本題。
1つ目のキー(サンプルでは都道府県)が同一なデータをすべて取り出す、といった操作が容易に行えるという特徴があります。
String[] tokyo = map.get("東京").keySet().toArray(new String[map.get("東京").size()]);
これで東京を1つ目のキーに持つデータを配列として扱うことが出来る。
とまあ書いたわけなんですが、脳みそが筋肉でできているぼくは「よーし、東京のデータを取り出しちゃうぞ」って思った時に
System.out.println(map.get("東京"));
とかやってみたんですけど {秋葉原=2000, 渋谷=1000}
って当然ながらHashMapで返ってくるんですよ。
順番バラバラになってて嫌だったからLinkedHashMapとかに変更してみたりしても現実逃避に過ぎなかったんですよね。
ちょっと脳筋すぎたから「戻り値Stringのやつを選べばいいんじゃね」とか思ったりしながらムキムキしてたけど明後日すぎたわけで。
で、落ち着いてさっきの出力結果を見なおしたら東京を1つ目のキーに持つHashMapにおけるKeyと値の組み合わせ(くどい)なんですよね。
あれ? こいつのKey一覧取得すればいいだけじゃね? とようやく気付いてkeySetを試したら出るわ出るわ。
んで、Set型で帰ってくるから、最終的にtoArrayを使ってString型の配列にぶち込んで終了。