Help us understand the problem. What is going on with this article?

複数キーを持つハッシュデータ

More than 5 years have passed since last update.

http://www.atmarkit.co.jp/fjava/javatips/081java010.html

作り方自体はもうこれ書いてあるままじゃねえか!という話でしか無いんですけど

hashdata.java
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型の配列にぶち込んで終了。

DQMerA
酒場の守護者
denagames
ユーザーファーストを掲げ、アプリ・ブラウザゲームの運営に特化したDeNAのグループ会社です
https://denagames-tokyo.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away