需要帮助HashMaps?

时间:2011-06-10 07:12:46

标签: java

我有以下情况:

    public class MapTest {
    String name = "guru";
    /**
     * @param args
     */
    public static void main(String[] args) {
        MapTest mapTest = new MapTest();
        Map map = new HashMap();
        map.put("name", mapTest.name);

        System.out.println(mapTest.name);
        map.put("name", "raj");
        System.out.println(mapTest.name);
    }

   }

输出是:

guru
guru

有什么方法可以将输出作为

guru
raj

即。我希望HashMap map和成员变量name同步。

感谢。

4 个答案:

答案 0 :(得分:8)

你做不到。这不是Java的工作方式。当你写:

map.put("name", mapTest.name);

当前值mapTest.name 放入地图中。在评估了参数之后,它是原始表达式的完全独立的

如果你需要做喜欢这样的事情,你会有一些可变的包装类 - 你将包装器的引用添加到地图中,并且然后你可以改变包装器中的值,并且无论你如何到达包装器,你仍然会看到更改。

示例代码:

import java.util.*;

class StringWrapper {
    private String value;

    StringWrapper(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return value;
    }
}


public class Test {
    public static void main(String[] args) throws Exception {
        Map<String, StringWrapper> map = new HashMap<String, StringWrapper>();

        StringWrapper wrapper = new StringWrapper("Original");
        map.put("foo", wrapper);

        System.out.println(map.get("foo"));

        wrapper.setValue("Changed");

        System.out.println(map.get("foo"));
    }
}

答案 1 :(得分:1)

Java地图只是不支持这样的东西。当你这样做

    map.put("name", mapTest.name);

您在地图中引用mapTest.name引用的对象。当你这样做

    map.put("name", "raj");

您在地图中引用了新的String对象。 mapTest.name的引用不再出现在地图中。

出于好奇,你为什么不想只使用map.get("name")

答案 2 :(得分:1)

您似乎对地图的工作方式感到困惑。为了更好的主意,请尝试打印出地图。

map.put("name", mapTest.name);
System.out.println(map);
map.put("name", "raj");
System.out.println(map);

你会得到:

{ “名称”= “大师”}
{ “名称”= “拉吉”}

请注意mapTest.name ==“guru”,因为您永远不会修改它。

答案 3 :(得分:0)

如果您想要动态执行某些操作,则应使用函数/方法。

public class MapTest {
    private final Map<String, String> map = new HashMap<String, String>();

    public String name() {
        return map.get("name");
    }

    public static void main(String[] args) {
        MapTest mapTest = new MapTest();
        mapTest.map.put("name", "guru");
        System.out.println(mapTest.name());
        mapTest.map.put("name", "raj");
        System.out.println(mapTest.name());
    }
}

打印

guru
raj