Java HashMap更改引用的值

Java HashMap更改引用的值,java,reference,hashmap,Java,Reference,Hashmap,我对HashMap有问题。插入新的键值对时,它会更改存储为值的引用 我使用HashMap可以更快地访问存储在层次结构中的对象。插入第一对时,其地址与原始地址相同。添加另一对后,存储在HashMap中的地址将发生更改。因此,我无法通过HashMap显示原始对象 为什么会这样 下面是我如何构造HashMap的代码。在第二种方法中,在第一个for循环中发生上述情况 private Map<String, Parameter> createRefMap(Settings settings)

我对HashMap有问题。插入新的键值对时,它会更改存储为值的引用

我使用HashMap可以更快地访问存储在层次结构中的对象。插入第一对时,其地址与原始地址相同。添加另一对后,存储在HashMap中的地址将发生更改。因此,我无法通过HashMap显示原始对象

为什么会这样

下面是我如何构造HashMap的代码。在第二种方法中,在第一个for循环中发生上述情况

private Map<String, Parameter> createRefMap(Settings settings) {
    Map<String, Parameter> result = new HashMap<String, Parameter>();
    for (ParameterList parameterList : settings.getParameterList()) {
        result.putAll(createRefMap(parameterList, "SETTINGS"));
    }

    return result;
}

private Map<String, Parameter> createRefMap(ParameterList parameterList, String preLevel) {
    Map<String, Parameter> result = new HashMap<String, Parameter>();
    String level = preLevel + "/" + parameterList.getName();

    for (Parameter parameter : parameterList.getParameter()) {
        result.put(level + "/" + parameter.getName(), parameter);
    }

    for (ParameterList innerParameterList : parameterList.getParameterList()) {
        result.putAll(createRefMap(innerParameterList, level));
    }

    return result;
}

如果我理解正确,如果你这样做:

System.out.println(thing1.toString());
myMap.put(key1, thing1);
myMap.put(key2, thing2);
System.out.println(thing1.toString());
第二个println将以某种方式打印来自不同对象的结果?它是一个特定的物体,还是随机的一个?你所说的你的问题是不可能的;它将打破难以想象的java程序数量

你断言的一部分是“地址”改变了;我不知道你说的是什么意思。在许多调试器中可见的对象id?物理内存地址?再说一次,如果这两件事中的任何一件发生,地图就会被破坏


如果您的实际问题是,地图中的其他参考内容不再包含参考内容,则您正在将外部参考内容更改为参考内容。

请发布一些代码。您可以为您面临的问题粘贴一些代码吗?您所说的“地址已更改”是什么意思?您应该使用key来获取存储在HashMap中的对象。@我想他是指HashMap中的对象和层次结构中的对象不再相同,因此从HashMap检索到的对象不会在层次结构中发生更改。如果没有看到任何代码(或,所以我将引用的第一段:HashMap不保证映射的顺序;特别是,它不能保证随着时间的推移,顺序会保持不变。我只是找到了它。和往常一样,这真的很尴尬,但我确实在应用程序的另一部分更改了地图。上面的代码是模型的一部分,它将HashMap作为ModelEvent的一部分传递给视图,在视图中编辑映射。我现在确实在我的活动中发送了地图副本。
System.out.println(thing1.toString());
myMap.put(key1, thing1);
myMap.put(key2, thing2);
System.out.println(thing1.toString());