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