在java中合并地图

时间:2012-06-13 07:51:01

标签: java merge maps

我想要做的很简单。我想合并两张地图。 说

map1={(1,"one"),(2,"two"),(3,"three");
map2={(1,"onetoo"),(4,"four")};

如果我按照这个 - >

map3.putall(map1);
map3.putall(map2);

那么值1是onetoo但是当我按照反向时它是一个。 无论如何我可以改变它吗?我的意思是java覆盖并只放入一个键的最新值。 即如果在一个(在它们各自的地图中)之后添加了onetoo,那么无论putall调用map3的顺序如何,该值仍然是onetoo。

3 个答案:

答案 0 :(得分:7)

除非您存储添加值的实际时间,否则无法执行此操作。

map1={(1,("one", 15:15)), (2, ("two", 15:16))}

然后你可以添加map1的所有内容,然后迭代map2,只有在密钥不存在的情况下才添加,或者如果它在那里但是具有更早的时间戳。

答案 1 :(得分:1)

这就是地图的工作原理,它们使用您设置为关键字的对象的哈希码作为在地图条目中识别其自身的方式,并且您可以看到它必须是唯一的。

因此,您必须指定另一个键,因为整数值1的哈希码为1。

答案 2 :(得分:0)

好吧,如果你的程序按你的意愿工作,那么就预测下面的输出

 map3.get(1);

你永远无法知道它是“One”还是“Onetoo”。

为防止出现此类问题,Google地图中的地图仅包含唯一键。

所以,如果你写

map3.putall(map1);

1的值是“1”。但是一写到

map3.putall(map2);

重置1的值,它变为“onetoo”。当你扭转它时会发生反转。可能的解决方案可能是。

  1. 在地图中输入您的密钥,使它们(键)唯一地标识一个对象。因此,无论何时将来合并地图,都不会在密钥中发生冲突(就重复性而言)。

  2. 如果你不能这样做,那么一个可能的解决办法就是获取每张地图的所有键并检查重复性并更改重复键,以便你可以毫无困难地检索你的对象。 / p>