如何使用hashmap.put而不覆盖以前的数据? (Java)的

时间:2013-01-14 08:25:18

标签: java hashmap override

我有类似的东西:

public HashMap<Boolean, String> map = new HashMap();
map.put(this.inverted, "Inverted");
map.put(this.active, "Loading");
System.out.println(map.size());

在看到大小总是1之后,我意识到使用map.put会覆盖以前的数据。我目前正在尝试迭代hashmap。有没有办法在不覆盖以前的映射的情况下为其添加映射?

7 个答案:

答案 0 :(得分:3)

您已将 HashMap 声明为: -

public HashMap<Boolean, String> map = new HashMap();

现在,想想你的map中有多少最大映射?您可以通过思考Boolean类型可以采用的所有值来获得答案。这是因为,您不能在HashMap中使用重复的密钥。

所以,可能你现在得到了,你最多只能在你的地图中2 mappings,一个用于true而另一个用于false(实际上你可以有一个{ {1}}也是一样,因为您3rd中也可以有null键的映射。

因此,在您的情况下,如果HashMapthis.inverted都是this.activetrue。然后只有其中一个可以存在,这将是后来插入的值。

  

有没有办法在不覆盖以前的映射的情况下为其添加映射?

可能你错误​​地构建了 HashMap 。您应该将地图声明为: -

false

现在你可以将两个映射放在: -

private Map<String, Boolean> map = new HashMap();

答案 1 :(得分:1)

这是因为this.inverted.equals(this.active)this.inverted.hashcode()==this.active.hashcode()

也许你需要重新定义密钥的equals方法。

答案 2 :(得分:0)

在MAP中

将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。 ---&GT;来自Map Api

来自您的实施,可能this.invertedthis.active都具有相同的价值。

检查输入一次。打印keySet,然后检查。

或将输入更改为Map<String, Boolean>

答案 3 :(得分:0)

正如@Frank建议你应该反转你的地图。

public final Map<String, Boolean> map = new HashMap<>();

map.put("Inverted", this.inverted);
map.put("Loading", this.active);
System.out.println(map);

答案 4 :(得分:0)

如果在标准Java Map中覆盖了与先前值相同的键。如果你不想这样,你可以看一下在例如commons-collections中实现的多图。它可以为一个键保存不同的值。

答案 5 :(得分:0)

Hashmap基于键/值对。如果您的密钥相等(它们具有相同的哈希码),它将按您所描述的那样运行。

对于您的用例,反转您的键/值对将对您有所帮助。

public HashMap<String, Boolean> map = new HashMap();
map.put("Inverted", this.inverted); 
map.put("Loading", this.active);
System.out.println(map.size());

答案 6 :(得分:-2)