1

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

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

如果我遵循这个->

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

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

4

3 回答 3

7

没有办法做到这一点,除非您存储添加值的实际时间。

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

然后,您可以添加所有 map1,然后仅在密钥不存在或存在但具有较早时间戳的情况下迭代 map2 添加。

于 2012-06-13T07:55:53.853 回答
1

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

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

于 2012-06-13T07:58:34.197 回答
0

好吧,如果您的程序按您的意愿运行,那么预测以下输出

 map3.get(1);

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

为了防止任何此类问题,Java 中的 Map 被设计为仅包含唯一键。

所以,如果你写

map3.putall(map1);

1 的值为“一”。但只要你写

map3.putall(map2);

1 的值被重置并变为“onetoo”。反转时会发生反转。可能的解决方案可能是。

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

  2. If you can't do it, then a possible solution could be to get all keys of every map and check for duplicity and change the duplicate keys in such a way that you can retrieve your objects without hassle.

于 2012-06-13T10:04:05.440 回答