有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java算法将列表的值映射到Hashmap中

我有一个HashMap:

K1, false
K2, false
K3, false
...
K1000, false

最初,键的所有值都是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) 个答案

  1. # 1 楼答案

    使用Map.replace()

    for (E element : list) {
        map.replace(element, true);
    }
    

    这将仅使用list中的匹配元素更新现有密钥

    作为旁注,一个Map<K, Boolean>通常可以被一个较轻的Set<K>代替

  2. # 2 楼答案

    您不需要显式地迭代HashMaphashMap.containsKey(key)检查键是否以优化方式存在于映射中。您需要研究一下HashMap是如何工作的

    Iterate List:
        if HashMap.containsKey(List[i])
            HashMap.put(List[i], true)
    

    这会奏效的