Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hashmap中具有不同键的相同值_Java_Hashmap - Fatal编程技术网

Java hashmap中具有不同键的相同值

Java hashmap中具有不同键的相同值,java,hashmap,Java,Hashmap,最初,我将两个具有相同值的条目放入hashmap中。这两个条目的值本身就是一个映射。这些条目具有不同的键 现在我想把新的值放入映射中,即第一个条目的值。问题是,只要我更改第一个条目,第二个条目的映射及其值也会更改。两个不同的键以某种方式引用相同的值映射 我应该怎么做才能分别编辑初始相同值的值?基本上,问题是您没有将两个地图放入地图,而是将两个引用放入同一地图 要在外部地图中有两个独立版本的内部地图,您需要在第二次放入之前复制一个内部地图 您应该能够使用HashMap的clone方法制作HashM

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

现在我想把新的值放入映射中,即第一个条目的值。问题是,只要我更改第一个条目,第二个条目的映射及其值也会更改。两个不同的键以某种方式引用相同的值映射


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

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

要在外部地图中有两个独立版本的内部地图,您需要在第二次放入之前复制一个内部地图

您应该能够使用HashMap的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.

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

要在外部地图中有两个独立版本的内部地图,您需要在第二次放入之前复制一个内部地图

您应该能够使用HashMap的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.

在不同的键下放置相同的引用很好。但是,为了解决这个问题,我不会使用克隆方法,而是使用显式复制: 包com.au.psiu

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项目——它们有很多有用的API用于收藏。

在不同的键下放置相同的引用是一个很好的发现。但是,为了解决这个问题,我不会使用克隆方法,而是使用显式复制: 包com.au.psiu

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项目——他们有很多有用的API用于收藏。

使用克隆库为我节省了时间!使用克隆库为我节省了时间!