我有一个HashMap:
K1, false
K2, false
K3, false
...
K1000, false
最初所有键的值都是假的。
我有一个ArrayList:
K3, K10, K33,..., K417, K834, K998
我需要获取列表的值,并在相应键的Hashmap中将这些值标记为“true”。现在我知道我们可以做到这一点:
Iterate HashMap:
Iterate List:
if HashMap.contains(List[i])
HashMap.put(List[i], true)
但我们在这个逻辑中使用了2次迭代,也许对于1000个键来说这不是什么大问题,但是如果我想将它扩展到一百万个键,我可以使用任何有效的算法来实现上述目标吗?
感谢。
答案 0 :(得分:3)
您不需要明确地迭代HashMap
。 hashMap.containsKey(key)
以优化的方式检查地图中是否存在关键字。你需要研究一下HashMap的工作原理。
Iterate List:
if HashMap.containsKey(List[i])
HashMap.put(List[i], true)
这样可行。
答案 1 :(得分:2)
使用Map.replace()
:
for (E element : list) {
map.replace(element, true);
}
这只会更新list
中匹配元素的现有密钥。
作为旁注,Map<K, Boolean>
通常可以用打火机Set<K>
代替。