Mapをコピーする ※2013/07/29 内容更新
最近まで知らなかったのですが…。
これまでMapをコピーするのに、KeySetを取って存在するだけぐるぐる回して、
Keyに対応する値を取り出して、そのKeyと値をついにして新たなMapに追加していく、なんてコトをしていたのですが、以下の手順で簡単にできちゃいます。
しかも参照渡しじゃなくて値だけコピーされているので、いやあ人生無駄にしてきたなあとしみじみ思ったり。
→ももんが様からコメントをいただいて確認した所、内容物は同一オブジェクトのようですね。ご指摘ありがとうございました!
import java.util.HashMap; import java.util.Map; public class Sample { public static void main(String[] args) { Map<String, User> map1 = new HashMap<String, User>(); // map1に追加 map1.put("user", new User("松平 健")); // map1を引数にmap2を作成 Map<String, User> map2 = new HashMap<String, User>(map1); // trueが出力(map1の内容がコピーされている!) System.out.println(map2.containsKey("user")); // trueが出力(従ってmap1とmap2のUserオブジェクトは同一) User user1 = map1.get("user"); User user2 = map2.get("user"); System.out.println(user1 == user2); // map1から消す map1.remove("user"); // falseが出力 System.out.println(map1.containsKey("user")); // trueが出力(map2が格納しているUserの参照は変わらない) System.out.println(map2.containsKey("user")); } } class User { private String name; public User(String name){ this.name = name; } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } }