从对象中删除hashmap键

时间:2012-11-02 13:50:32

标签: java

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

我有一个包含这些keysvalues的哈希地图。

Patient filterList = new Patient();
filterList.setUser(user);

现在我创建另一个Patient Class实例。

Patient addRequest = new Patient();
user.remove("useValue");
addRequest.setUser(user);

为什么它会从两个对象中删除?虽然我只在完全形成filterList对象后才删除密钥。

3 个答案:

答案 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中。

因此,所有引用 - userfilterList.setUseraddRequest.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"));

希望这会有所帮助..