[英]Removing hashmap key from an object
HashMap<String, String> user= new HashMap<String, String>();
user.put("userID","1");
user.put("useValue", "false");
我有一个带有这些keys
和values
的hashMap。
Patient filterList = new Patient();
filterList.setUser(user);
现在,我创建另一个耐心类实例。
Patient addRequest = new Patient();
user.remove("useValue");
addRequest.setUser(user);
为什么从两个对象中都删除了它? 虽然我只有在filterList对象完全形成后才删除密钥。
这两个对象(filterList.setUser(user);)
和addRequest.setUser(user);
指向同一对象,因此更改对同一对象有效。
setUser(...)
并未真正创建副本。 它只是设置对用户对象的引用。
如果仔细观察,在两种情况下,引用都是用户,并且指向在HashMap<String, String> user= new HashMap<String, String>();
创建的同一对象HashMap<String, String> user= new HashMap<String, String>();
在班级中设置map
时, not creating a new copy
的地图not creating a new copy
。 而是在该类中创建pointing to the same
HashMap
对象copy of reference
。 因此,您使用任何参考对Map
所做的任何更改都会反映在all the references
。
因此,所有的引用- user
,一个在filterList.setUser
和addRequest.setUser
都指向同一个HashMap
对象。
您的示例中只有一个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"));
希望这可以帮助..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.