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;
	}
}