• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaの連想配列について教えてください)

Javaの連想配列について教えてください

このQ&Aのポイント
  • Javaの連想配列について教えてください。データを連想配列の形式で作成したい場合、HashMapを使用することができます。
  • 下記のサイトを参考に、HashMap+HashMapで連想配列を作成する方法を試してみましたがエラーが発生しました。エラーの原因として、((Map) map.get("school")).get("yamada")の部分でメソッドが見つからないというパターンです。
  • 連想配列を作成する際は、以下のようにHashMapを使用することで実現できます。 Map<String, Object> map = new HashMap<String, Object>(); map.put("school", new HashMap<String, Object>()); ((Map) map.get("school")).put("class", "A"); ((Map) ((Map) map.get("school")).get("yamada")).put("class", "AA"); ((Map) ((Map) map.get("school")).get("yamada")).put("height", 165); ((Map) ((Map) map.get("school")).get("yamada")).put("weight", 60);

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

#1さんのご指摘通り、((Map) map.get("school")).get("yamada")をMap型へキャストすれば大丈夫ですよ。カッコの位置を間違えやすいですが。 ((Map) ((Map) map.get("school")).get("yamada")).put("class", "AB"); もしくは、各Mapオブジェクトを一度それぞれの変数に入れてしまった方が、かえって分かりやすいかも知れません。 例) ------------------------------------ Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> school = new HashMap<String, Object>(); school.put("class", "A"); Map<String, Object> yamada = new HashMap<String, Object>(); yamada.put("class", "AB"); school.put("yamada", yamada); map.put("school", school); ---------------------------------------- ただ、このようなデータ構造の場合は、いっその事、クラスを作ってそこにデータを保持させる方が良いかと思います。構造が明確になり、型が保障され、値のチェック等の振る舞いも持たせられますので。もちろん、キャストも不要になりますし。 例) ------------------------------------ class School {  private Map<String, SchoolClass> classes = new HashMap<String, SchoolClass>();  void add(String name, SchoolClass schoolClass) {   classes.put(name, schoolClass);  } } class SchoolClass {  private Map<String, Student> students = new HashMap<String, Student>();  void add(String name, Student student) {   students.put(name, student);  } class Student {  private String cls;  private int height;  private int weight;  Student(String cls, int height, int weight) {   this.cls = cls;   this.height = height;   this.weight = weight;  } } // ・ // ・ // ・  School school = new School();  SchoolClass schoolClass = new SchoolClass();  schoolClass.add("yamada", new Student("AA", 165, 60));  school.add("A", schoolClass); ---------------------------------------- (SchoolClass や Student に自身の名前を保持させても良いでしょう) 一般的に、値の型がObjectの List や Set や Map を使っている時は、そのデータ構造をクラスで表現できないか一度は検討されると良いかと思います。(本質的にできない場合も有りますが)

gree777
質問者

お礼

回答ありがとうございます。 具体的なコードも書いていただきありがとうございます。 回答いただいた通りに実装して実現できました! キャスト方法が間違っていました。。。 ご指摘通りデータ構造をクラス化することも検討したいと思います。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

((Map) map.get("school")).get("yamada")はObject型だから、更にMap型へキャストしてあげればよいのでは。

gree777
質問者

お礼

Map型へキャスト方法を間違っていました。。。 キャストをして実現することができました。 ありがとうございます。

gree777
質問者

補足

回答ありがとうございます。 Map型へキャストをしてみたのですが、 同じようにエラーとなってしまいます。。。 再度教えていただけないでしょうか? よろしくお願い致します。

すると、全ての回答が全文表示されます。

関連するQ&A