You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

空HashMap的containsKey()为何返回true?Two Sum解法疑问

关于Two Sum问题中HashMap解法的疑问解答

你误解了HashMap的使用逻辑——初始化的空Map确实没有任何键,但这类高效解法的核心是边遍历数组边往Map中存入已处理过的元素,而非一开始就用空Map去匹配整个数组,具体流程拆解如下:

  • 初始化空HashMap,用来记录已经遍历过的数组元素及其对应的索引
  • 逐个遍历数组元素:
    1. 计算目标值与当前元素的差值:complement = target - nums[i]
    2. 检查该差值是否存在于HashMap的键集合中:
      • 若存在:说明之前遍历过的某个元素和当前元素相加正好等于目标值,直接返回这两个元素的索引
      • 若不存在:将当前元素和它的索引存入HashMap,继续下一轮遍历

用Java代码举个直观的例子:

public int[] twoSum(int[] nums, int target) {
    HashMap<Integer, Integer> numMap = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (numMap.containsKey(complement)) {
            return new int[] { numMap.get(complement), i };
        }
        numMap.put(nums[i], i);
    }
    throw new IllegalArgumentException("不存在满足条件的两个数");
}

拿具体场景验证:假设数组是[2,7,11,15],目标值为9

  • 第一次遍历元素2:差值为7,此时Map为空,containsKey(7)返回false,将2和索引0存入Map
  • 第二次遍历元素7:差值为2,此时Map中已有键2,直接返回[0,1]

你之前的疑惑源于没抓住“边遍历边存值”这个关键——空Map只有在存入了已处理元素后,containsKey()才有可能返回true,首次遍历的时候必然是false。很多解法说明没明确这个顺序,才造成了误解。

内容的提问来源于stack exchange,提问作者RYAN SIEGRIST

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:05:34