![](/img/trans.png)
[英]Anyway to have two of the same keys, but different values in Java 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.