2012-11-02 114 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")); 

希望這有助於..