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

如何在HashMap中统计对应关系?求区号关联手机号的计数方案

用Map统计区号对应的手机号数量:完美方案详解

嘿,你的思路完全踩对了!用Map(或者不同语言里的字典、哈希表)来实现这个统计需求,绝对是最简洁高效的选择。核心逻辑就是利用Map的键值对特性:把area_code作为唯一键(key),对应的值(value)用来累计该区号下的手机号数量。

核心步骤拆解

不管用什么语言,基本逻辑都是一致的:

  1. 初始化一个空的Map结构
  2. 遍历每一组area_code和phone_number数据
  3. 对每个区号做判断:
    • 如果该区号已经是Map里的键,就把对应的值加1
    • 如果是第一次出现这个区号,就把它加入Map,值设为1
  4. 遍历完成后,Map里就存储了每个区号对应的手机号总数

常见语言实现示例

1. Java 实现

用HashMap来做,还可以用compute方法简化逻辑:

import java.util.HashMap;
import java.util.Map;

public class AreaCodeCounter {
    public static void main(String[] args) {
        // 模拟输入数据:可以是从数据库、文件读取的列表
        String[][] phoneData = {
            {"351", "123456"},
            {"351", "1234567"},
            {"111", "678904"}
        };

        Map<String, Integer> areaCodeCount = new HashMap<>();

        for (String[] entry : phoneData) {
            String areaCode = entry[0];
            // 用compute方法自动处理存在/不存在的情况
            areaCodeCount.compute(areaCode, (key, count) -> count == null ? 1 : count + 1);
        }

        // 输出结果
        for (Map.Entry<String, Integer> entry : areaCodeCount.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
        // 输出:351:2、111:1
    }
}

2. Python 实现

Python里用普通字典或者collections.defaultdict会更省心:

from collections import defaultdict

# 模拟输入数据
phone_data = [
    ("351", "123456"),
    ("351", "1234567"),
    ("111", "678904")
]

area_code_count = defaultdict(int)

for area_code, _ in phone_data:
    area_code_count[area_code] += 1

# 输出结果
for area_code, count in area_code_count.items():
    print(f"{area_code}:{count}")
# 输出:351:2、111:1

如果不用defaultdict,普通字典也能实现:

area_code_count = {}
for area_code, _ in phone_data:
    if area_code in area_code_count:
        area_code_count[area_code] += 1
    else:
        area_code_count[area_code] = 1

3. JavaScript 实现

用原生的Map对象或者普通对象都可以:

// 模拟输入数据
const phoneData = [
    ["351", "123456"],
    ["351", "1234567"],
    ["111", "678904"]
];

const areaCodeCount = new Map();

phoneData.forEach(([areaCode]) => {
    if (areaCodeCount.has(areaCode)) {
        areaCodeCount.set(areaCode, areaCodeCount.get(areaCode) + 1);
    } else {
        areaCodeCount.set(areaCode, 1);
    }
});

// 输出结果
areaCodeCount.forEach((count, areaCode) => {
    console.log(`${areaCode}:${count}`);
});
// 输出:351:2、111:1

为什么用Map最合适?

  • 查找效率高:Map的键查找时间复杂度是O(1),遍历统计的整体复杂度是O(n),n是数据条数,效率拉满
  • 逻辑清晰:键值对的结构天然对应“区号-数量”的映射关系,代码可读性强
  • 扩展性好:如果后续需要附加更多信息(比如该区号下的手机号列表),只需要把value改成集合或者对象就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:07:53