我有一些类似的东西:
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 会覆盖以前的数据。我目前正在尝试迭代哈希图。有没有办法在不覆盖以前的映射的情况下向它添加映射?
我有一些类似的东西:
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声明为:-
public HashMap<Boolean, String> map = new HashMap();
现在,想想你的 ? 中可以有多少个最大映射map
?你可以通过思考得到答案,你的Boolean
类型可以取什么值。这是因为,您不能在HashMap
.
所以,可能你现在明白了,你最多只能2 mappings
在你的地图中拥有一个,一个用于true
,另一个用于false
(实际上你也可以有3rd
一个,因为你也可以在你的 中拥有一个null
键的映射HashMap
)。
所以,在你的情况下,如果两者都是this.inverted
andthis.active
是true
or false
。然后其中只有一个可以在那里,那将是后来插入的值。
有没有办法在不覆盖以前的映射的情况下向它添加映射?
可能您错误地构建了HashMap 。您应该将您的地图声明为: -
private Map<String, Boolean> map = new HashMap();
现在您可以将两个映射设置为:-
map.put("Inverted", this.inverted);
map.put("Loading", this.active);
这是因为this.inverted.equals(this.active)
和this.inverted.hashcode()==this.active.hashcode()
也许您需要重新定义键的 equals 方法。
正如@Frank 建议的那样,您应该反转您的地图。
public final Map<String, Boolean> map = new HashMap<>();
map.put("Inverted", this.inverted);
map.put("Loading", this.active);
System.out.println(map);
如果键与前一个值相同,则在标准 Java Map 中被覆盖。如果你不想要这个,你可以看看在 commons-collections 中实现的 multimap。它可以为一个键保存不同的值。
Hashmap 基于键/值对。如果您的密钥相等(它们具有相同的哈希码),它将按照您的描述运行。
对于您的用例,反转您的键/值对将对您有所帮助。
public HashMap<String, Boolean> map = new HashMap();
map.put("Inverted", this.inverted);
map.put("Loading", this.active);
System.out.println(map.size());
在地图中
将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射到一个值。---> 来自地图 API
从您的实施来看,可能this.inverted
并且this.active
两者都具有相同的价值。
检查输入一次。打印keySet,然后检查。
或将输入更改为Map<String, Boolean>