2012-11-02 81 views
1
HashMap<String, String> user= new HashMap<String, String>(); 
user.put("userID","1"); 
user.put("useValue", "false"); 

我有一个hashMap,这些keysvalues从对象中删除hashmap密钥

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

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

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

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

回答

3

两个对象(filterList.setUser(user);)addRequest.setUser(user);指向同一个对象,所以变化是相同的对象上有效。

setUser(...)并没有真正创建一个副本。它只是设置对用户对象的引用。

如果你仔细观察,在两种情况下,引用是用户和指向在HashMap<String, String> user= new HashMap<String, String>();

1

创建当设置在类的map同一个对象,你是你的地图not creating a new copy。而一个copy of reference在该类0​​HashMap对象创建的。所以,您对Map使用任何引用的任何变化,都会得到体现为all the references

因此,所有的参考文献 - userfilterList.setUseraddRequest.setUser中的一个指向相同的HashMap对象。

+0

私人的HashMap 用户=新的HashMap < String,String>();我应该在班上做这样的事情吗? – theJava

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")); 

希望这有助于..