当前位置: 首页 > backend >正文

HashMap的基础用法(java)

Map<Integer, Integer> hashMap = new HashMap<>();
for (int num : nums) {hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);
}

逐行详细解释:

  1. Map<Integer, Integer> hashMap = new HashMap<>();

    • 创建一个HashMap对象,用来存储键值对(key-value pairs)
    • 第一个Integer是键的类型(这里存储数组中的数字)
    • 第二个Integer是值的类型(这里存储每个数字出现的次数)
    • HashMap<>中的<>表示使用泛型,可以确保类型安全
  2. for (int num : nums)

    • 增强型for循环,遍历数组nums中的每一个元素
    • 每次循环,当前元素的值会被赋给变量num
  3. hashMap.put(num, hashMap.getOrDefault(num, 0) + 1);

    • 这是最核心的部分,完成统计功能
    • 拆解来看:
      • hashMap.getOrDefault(num, 0)
        • 尝试从hashMap中获取键为num的值(即该数字已出现的次数)
        • 如果num不存在于map中,则返回默认值0
      • ... + 1
        • 将获取到的值(已出现次数)加1
      • hashMap.put(num, ...)
        • num作为键,更新后的计数值作为值存入map中
        • 如果键已存在,会覆盖旧值;如果不存在,会新建一个条目

完整代码上下文

for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {arr[i] = entry.getKey();     // 获取键(数组元素)count[i] = entry.getValue();  // 获取值(出现次数)i++;
}

逐部分解析

1. frequencyMap.entrySet()

  • ​作用​​:返回 Map 中所有键值对的集合(Set 集合)
  • ​返回值​​:是一个 Set<Map.Entry<Integer, Integer>> 类型的集合
  • ​特点​​:
    • 每个元素都是一个 Map.Entry 对象
    • Entry 是 Map 接口的内部接口,表示一个键值对

2. Map.Entry<Integer, Integer>

  • ​含义​​:表示 Map 中的一个键值对条目
  • ​泛型参数​​:
    • 第一个 Integer:键(key)的类型,这里是你数组中的数字
    • 第二个 Integer:值(value)的类型,这里是该数字出现的次数
  • ​常用方法​​:
    • getKey():获取该条目的键
    • getValue():获取该条目的值
    • setValue(V value):设置该条目的值

3. for 循环结构

  • ​类型​​:增强型 for 循环(foreach 循环)
  • ​工作方式​​:
    • 每次循环从 entrySet() 返回的集合中取出一个 Entry 对象
    • 赋给 entry 变量
    • 直到遍历完所有条目

4. 类比解释

可以把 frequencyMap 想象成一个字典:

  • entrySet() 相当于把字典中所有的"词条"(单词+解释)都拿出来
  • 每个 Entry 对象就是一个词条
    • getKey() 获取单词
    • getValue() 获取解释
  • foreach 循环就是依次查看每个词条
http://www.xdnf.cn/news/8180.html

相关文章:

  • [Harmony]WebView基本用法
  • WebGL基本概念
  • C++:RAII的不能顾名思义?
  • docker多阶段构建镜像
  • gd32e230c8t6 驱动ws2812
  • 几种直流电流采样方法
  • ADC 单次转换、连续转换、扫描转换和间接转换模式 详解。
  • MySQL 可观测性最佳实践
  • 怎样通过神经网络估计股票走向
  • Jeecg漏洞总结及tscan poc分享
  • 现代健康养生指南
  • 性能测试场景题
  • 高频晶振的信号完整性挑战:如何抑制EMI与串扰
  • 如何在 Windows 11/10 计算机上有效粉碎文件
  • 十二、Linux实现截屏小工具
  • [MH22D3开发笔记]1. 变量地址对齐,宏__ALIGNED的使用
  • MRI学习笔记-表征相似性分析(Representational Similarity Analysis, RSA)
  • Redis 中如何保证缓存与数据库的数据一致性?
  • 高性能算法RIME:基于物理的优化的霜冰优化算法
  • Golang——1、环境搭建与入门
  • 苍穹外卖06 HttpClient微信小程序开发 微信登录导入商品浏览功能代码
  • Vue3前后端分离用户信息显示方案
  • ModbusRTU转profibusDP网关接皖仪SFJ-16M 氦质谱检漏仪与PLC通讯
  • 虚拟小号查询技术解析
  • Redis进阶之高可用
  • 选新手机的参考:CPU型号、内存、外存、屏幕、摄像头以及电池等。
  • 详解受约束的强化学习(三、公式关系串联)
  • 【Linux 服务器磁盘映像备份与恢复实战指南】虚拟机备份,物理机上云都可以用这套方案!
  • 2025年气候持续大风,消纳减少,如何保收益?东润能源整体解决方案持续保收益保增长
  • C++:面试题汇总