如何在HashMap中统计对应关系?求区号关联手机号的计数方案
用Map统计区号对应的手机号数量:完美方案详解
嘿,你的思路完全踩对了!用Map(或者不同语言里的字典、哈希表)来实现这个统计需求,绝对是最简洁高效的选择。核心逻辑就是利用Map的键值对特性:把area_code作为唯一键(key),对应的值(value)用来累计该区号下的手机号数量。
核心步骤拆解
不管用什么语言,基本逻辑都是一致的:
- 初始化一个空的Map结构
- 遍历每一组
area_code和phone_number数据 - 对每个区号做判断:
- 如果该区号已经是Map里的键,就把对应的值加1
- 如果是第一次出现这个区号,就把它加入Map,值设为1
- 遍历完成后,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
相关产品推荐
相关产品推荐

