【Java】Listの中にMapを代入する方法
JavaでListの中にMapを代入するには、Listの型をMapにすること(例:List<List<String>>※型をString型のListに指定)することでaddメソッドなど使用し、代入することができます。
// Listの型をString型,String型のMapに指定 List<Map<String,String>>ListMap = new ArrayList<Map<String,String>>(); // 型をString型,String型 Map<String,String>Map = new HashMap<String,String>(); for(int i = 0; i < 3; i++){ Integer j = Integer.valueOf(i); String str = j.toString(); Map.clear(); Map.put(str,str+1); System.out.println(Map); // Listの中にMapを代入する※参照渡ししないためnewで代入 ListMap.add(new HashMap<String,String>(Map)); } // Listの中を確認 System.out.println(ListMap); // 実行結果 {0=01} {1=11} {2=21} [{0=01}, {1=11}, {2=21}]
Listの中にMapを追加するときは、参照渡ししていないか注意が必要
”参照渡し”をArrayListに代入していることから、最後に代入されたオブジェクトのみの表示しかされないケースがあります。
例えば、以下のプログラムは参照渡しされ、想定と違うListの中身となりました。
ListにMapを追加する際は下記のサンプルプログラムにならないようにnewを使用する必要があります。
// Listの型をString型,String型のMapに指定 List<Map<String,String>>ListMap = new ArrayList<Map<String,String>>(); // 型をString型,String型 Map<String,String>Map = new HashMap<String,String>(); for(int i = 0; i < 3; i++){ Integer j = Integer.valueOf(i); String str = j.toString(); Map.clear(); Map.put(str,str+1); System.out.println(Map); //参照渡し ListMap.add(Map); } // Listの中を確認 System.out.println(ListMap); // 実行結果 {0=01} {1=11} {2=21} [{2=21}, {2=21}, {2=21}]
コメントを残す