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

我有一个带有这些的 hashMapkeysvalues.

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

现在我创建另一个患者类实例。

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

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

4

3 回答 3

3

两个对象都(filterList.setUser(user);)指向 addRequest.setUser(user); 同一个对象,因此更改对同一个对象有效。

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

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

于 2012-11-02T13:51:27.693 回答
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"));

希望这可以帮助..

于 2012-11-02T14:19:05.543 回答
1

当你map在课堂上设置时,你就是not creating a new copy你的地图。而是copy of reference在该类pointing to the same HashMap对象中创建 a。因此,您对Mapusing any reference 所做的任何更改都将反映在all the references.

所以,所有的引用 - userfilterList.setUser和中的一个addRequest.setUser都指向同一个HashMap对象。

于 2012-11-02T13:52:54.923 回答