我有类似的东西:
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。有没有办法在不覆盖以前的映射的情况下为其添加映射?
答案 0 :(得分:3)
您已将 HashMap 声明为: -
public HashMap<Boolean, String> map = new HashMap();
现在,想想你的map
中有多少最大映射?您可以通过思考Boolean
类型可以采用的所有值来获得答案。这是因为,您不能在HashMap
中使用重复的密钥。
所以,可能你现在得到了,你最多只能在你的地图中2 mappings
,一个用于true
而另一个用于false
(实际上你可以有一个{ {1}}也是一样,因为您3rd
中也可以有null
键的映射。
因此,在您的情况下,如果HashMap
和this.inverted
都是this.active
或true
。然后只有其中一个可以存在,这将是后来插入的值。
有没有办法在不覆盖以前的映射的情况下为其添加映射?
可能你错误地构建了 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.inverted
和this.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)