HashMap<String, String> user= new HashMap<String, String>();
user.put("userID","1");
user.put("useValue", "false");
我有一个包含这些keys
和values
的哈希地图。
Patient filterList = new Patient();
filterList.setUser(user);
现在我创建另一个Patient Class实例。
Patient addRequest = new Patient();
user.remove("useValue");
addRequest.setUser(user);
为什么它会从两个对象中删除?虽然我只在完全形成filterList对象后才删除密钥。
答案 0 :(得分:3)
对象(filterList.setUser(user);)
和addRequest.setUser(user);
都指向同一个对象,因此更改对同一对象有效。
setUser(...)
并没有真正创建副本。它只是设置对用户对象的引用。
如果仔细观察,在两种情况下,引用都是用户并指向在HashMap<String, String> user= new HashMap<String, String>();
答案 1 :(得分:1)
当您在班级中设置map
时,您的地图为not creating a new copy
。而是在该类copy of reference
pointing to the same
对象中创建HashMap
。因此,您使用任何引用对Map
所做的任何更改都会反映在all the references
中。
因此,所有引用 - user
,filterList.setUser
和addRequest.setUser
中的引用都指向同一个HashMap
对象。
答案 2 :(得分:1)
您的示例中只有一个hashmap对象。
HashMap<String, String> user= new HashMap<String, String>();
对象filterList和addRequest都取决于单个用户对象。因此,如果对用户对象进行任何更改,它将同时影响filterList和addRequest。
如果您不希望更改反映在filterList和addRequest中,则创建两个hashmap对象
HashMap<String, String> user1= new HashMap<String, String>();
HashMap<String, String> user2 = new HashMap<String, String>();
user1.put("userID","1");
user1.put("useValue", "a");
user2 = (HashMap<String, String>)user1.clone();
user1.remove("userID");
System.out.println(user2.get("userID"));
System.out.println(user1.get("userID"));
希望这会有所帮助..