繁体   English   中英

hashmap 中具有不同键的相同值

[英]Same values with different keys in a hashmap

最初,我将两个具有相同值的条目放入 hashmap。 这两个条目的值本身就是 map。 这些条目有不同的键。

现在我想将新值放入第一个条目的 map(值)中。 问题是只要我改变第一个条目,第二个条目的map(它的值)也改变了。 这两个不同的键以某种方式引用了相同的值(映射)。

我应该怎么做才能分别编辑最初相同值的值?

基本上,问题在于您没有将两个地图放入 map,而是将两个引用放入同一个map。

要在外部有两个独立版本的内部 map,您需要在第二次放入之前对其进行复制。

您应该能够使用其clone方法制作HashMap的副本。 请注意,虽然这确实为您提供了两张不同的地图,但两张地图中的实际值是相同的。 这意味着如果复制的地图的内容是可变的并且您更改了它们,它们仍然会在两个地方发生变化。

澄清:

HashMap<Object, Object> map1 = new HashMap<Object, Object>()// This is your original map.
map1.put("key", mutableObject)
HashMap<Object, Object> map2 = map1.clone();
map2.put("something", "something else");// map1 is unchanged
map2.get("key").change();// the mutable object is changed in both maps.

将相同的参考放在不同的键下很好。 但是为了解决问题,我不会使用clone方法,而是使用显式复制:

import java.util.HashMap;
import java.util.Map;

public class NoIdea {

    public static void main(String... args) {
        Map source = new HashMap();

        //Insert value into source
        Map copy1 = new HashMap();
        copy1.putAll(source);
        Map copy2 = new HashMap();
        copy2.putAll(source);

        Map mapOfMaps = new HashMap();
        mapOfMaps.put("key1", copy1);
        mapOfMaps.put("key2", copy2);
        //...and you can update maps separately
    }
}

此外,您可能想看看 google guava 项目 - 他们为 collections 提供了很多有用的 API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM