繁体   English   中英

从对象中删除哈希映射键

[英]Removing hashmap key from an object

HashMap<String, String> user= new HashMap<String, String>();
user.put("userID","1");
user.put("useValue", "false");

我有一个带有这些keysvalues的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.setUseraddRequest.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM