将List的Java映射值转换为Hashmap

时间:2017-08-06 23:19:57

标签: java algorithm data-structures

我有一个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个键来说这不是什么大问题,但是如果我想将它扩展到一百万个键,我可以使用任何有效的算法来实现上述目标吗?

感谢。

2 个答案:

答案 0 :(得分:3)

您不需要明确地迭代HashMaphashMap.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>代替。