- ベストアンサー
MAPの配列・・・???!!!
Mapというものを使うのが初めてなのですが、 よくわからなくなってしまいました。 他のプログラムから、 「MAPの配列で返ってくる」 のですが、このMAPの配列をintひとつ、ストリング2つから 作ろうとしているのですが、できずに困っています。 map[0]=("abc","ABC") map[1]=("def","DEF") map[2]=("ghi","GHI") ・ ・ みたいなイメージなのですが、エラーになります・・・ Map[] hairetu = new HashMap(); これでコンパイルできません。 HelloWorldMap.java:17: 互換性のない型 出現: java.util.HashMap 要求: java.util.Map[] Map[] hairetu = new HashMap(); Map[] hairetu; という宣言だけならできます。 受け渡し先でMapの配列を要求しているのでこのような形が必要なのですが・・・ ちなみにソースを見ると hairetu[i].get(キー) みたいなとり方をしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>MAPの配列をintひとつ、ストリング2つから >作ろうとしているのですが、できずに困っています。 回答に対するコメントを見ていて思ったのですが、質問の内容は、MAPの配列をintひとつ、String2つからつくる方法のみということですよね。 だとしたらその回答だけ書くことにします。 int oneInt = 1;// ひとつのint String oneOfTwo = "一番目のString"; String twoOfTwo = "二番目のString"; Map[] twoMaps = new Map[2]; twoMaps[0] = new HashMap<Integer,String>(); twoMaps[1] = new HashMap<Integer,String>(); twoMap[0].put(oneInt, oneOfTwo); twoMap[1].put(oneInt, twoOfTwo); これで、ひとつのintと2つのStringからMapの配列をつくったことになります。
その他の回答 (2)
- HarukaV49
- ベストアンサー率53% (48/89)
>map[0]=("abc","ABC") >(略) >みたいなイメージなのですが、エラーになります・・・ こういうイメージだと単に、 Map<String, String> hairetu = new HashMap<String, String>(); hairetu.put("abc", "ABC"); hairetu.put("def", "DEF"); hairetu.put("ghi", "GHI"); String value = hairetu.get("abc"); //Java2SDK1.4以前なら Map hairetu = new HashMap(); hairetu.put("abc", "ABC"); hairetu.put("def", "DEF"); hairetu.put("ghi", "GHI"); String value = (String)hairetu.get("abc"); こういうことだと思います。Mapが配列である必要性がありません。 >ちなみにソースを見ると >hairetu[i].get(キー) >みたいなとり方をしています。 この場合には、hairetu[i]のMapの構造がわかりませんので 具体的なサンプルコードが示せません。 これで何か、ヒントになりましたか?
補足
>こういうことだと思います。Mapが配列である必要性がありません。 僕も必要性を感じないのですが、 外部モジュールが「MAPの配列で返す」仕様であるため仕方が無いのです。 hairetu[i].get(キー) これをhairetuのlength分まわして値を取得しているだけです。 好ましい、好ましくないに関わらず、 なるべく元ソースを変更しないで修正を行いたい為、 質問させていただきました。
- ggaogg
- ベストアンサー率43% (38/88)
マップ配列なんて使ってるところを見たことがないのですが・・、一応マップの配列の定義のしかたを載せてみます。 質問者さんの根本的な間違いに気づくと思います。 わからないことがあれば、その部分をまた書いてください。 Map[] maps = new Map[3]; for (int i=0, length = map.size() ; i<length ; i++) { maps[i] = new HashMap(); }
お礼
Map[] maps = new Map[3]; ですね! 多分コレでできます! 助かりました!!
補足
そうなんです。 全然サンプルが無いし、 僕自身も何で配列なのかがわからないんです。 キーによって値が返ってくるMapで配列にする必要性が・・・ ただ、そうはいってももとからあるプログラムが hairetu[i].get(キー) みたいなとり方をしていて、「間違いではない」ようなのです。 (ふつうはhairetu.get(キー)のようになりますよね) API仕様書を見ても 「MAPの配列を返します」 と書いてあり、 public Map[] となっているんです・・・ あとMAPの配列、と書いてしまいましたが、正しくは 「Mapオブジェクトの配列」 のようです
お礼
すごい!! たぶんジャストだと思います! 今から早速試してみますね!! とてもうれしいです!
補足
できたみたいです! 正確にはちょっと違っていて、こんな感じです。 import java.util.*; public class MapTest { public static void main(String[] args) { int oneInt = 1; String oneOfTwo = "一番目のString"; String twoOfTwo = "二番目のString"; Map[] twoMaps = new Map[2]; twoMaps[0] = new HashMap(); twoMaps[1] = new HashMap(); twoMaps[0].put(oneOfTwo,twoOfTwo); System.out.println(twoMaps[0].get(oneOfTwo)); } } キーも値もStringです。 JDKは1.3なので<>の書き方はできませんでした。 (1.3はstringだけ?みたいです) 配列の意味がほんとにないですよね 汗 ソースを見ても、キーは取得してあって、値を取ろうとしていますので いまいち必要性がわかりませんが (全部でデータが何個?とかやりやすいからかも??) 何はともあれ、なんとかなりそうです! 早速組み込んでみます! ありがとうございました!