news 2026/4/15 13:47:43

简要总结 HashSet 和 HashMap(Java)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简要总结 HashSet 和 HashMap(Java)
  • 一、基本概念

    HashSet

  • 定义:只存储值(元素)的集合
  • 特点:不允许重复元素,无序
  • 底层实现:基于 HashMap 实现
  • HashMap

  • 定义:存储键值对(key-value)的映射
  • 特点:key 不允许重复,value 可以重复
  • 底层实现:数组 + 链表/红黑树

二、常用操作

HashSet 常用方法

Set<String> set = new HashSet<>(); set.add("apple"); // 添加元素 set.contains("apple"); // 判断是否存在 set.remove("apple"); // 删除元素 set.size(); // 获取大小 set.isEmpty(); // 判断是否为空 set.clear(); // 清空

HashMap 常用方法

Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); // 添加/更新 map.get("apple"); // 获取值 map.containsKey("apple"); // 判断key是否存在 map.remove("apple"); // 删除 map.size(); // 获取大小 map.keySet(); // 获取所有key map.values(); // 获取所有value map.entrySet(); // 获取所有键值对

三、时间复杂度

HashSet

  • 添加/查找/删除:O(1) 平均,O(n) 最坏

HashMap

  • 添加/查找/删除:O(1) 平均,O(n) 最坏

四、使用场景

HashSet 适用场景

  • 去重:去除重复元素
  • 快速查找:判断元素是否存在
  • 记录访问过的节点:如检测链表环

HashMap 适用场景

  • 计数:统计元素出现次数
  • 缓存:key-value 缓存
  • 索引:快速根据 key 查找 value
  • 两数之和:快速查找目标值

五、实际应用示例

HashSet 示例

//去重 Set<Integer>set=new HashSet<>(); for(int num:arr){ set.add(num); //自动去重 } //检测链表环 Set<ListNode>visited =new HashSet<>(); while(node!=null){ if(visited.contains(node)){ return true; } visited.add(node); node=node.next; }

HashMap 示例

//计数 Map<String,Integer> count=new HashMap(); for(String word:words){ count.put(word,getOrDefault(word,0)+1); }

关键方法:

  • count.getOrDefault(word, 0):获取 word 对应的值,不存在返回 0
  • count.put(word, newCount):存入或更新 word 的计数

执行过程:

words = ["apple", "banana", "apple"]

第1次:apple
getOrDefault("apple", 0) = 0(不存在)
put("apple", 0 + 1) → count = {apple=1}

第2次:banana
getOrDefault("banana", 0) = 0
put("banana", 0 + 1) → count = {apple=1, banana=1}

第3次:apple
getOrDefault("apple", 0) = 1(已存在)
put("apple", 1 + 1) → count = {apple=2, banana=1}

public int[] towSum(int[]nums,int target){ Map<Integer,Integer>map=new HashMap<>(); for(int i=0;i<nums.length;i++){ int need=target-nums[i]; } if(map.containKey(need)){ int index1=map.get(need); //之前遇到的数的索引 int index2=i; //当前数的索引 int [] result=new int[2]; result[0]=index1; result[1]=index2; return result; } //没找到,把当前数和索引存入map map.put(nums[i],i); }

六、注意事项

  1. equals 和 hashCode:自定义类作为 key 或元素时,必须重写
  1. null 值:都允许一个 null 值
  1. 线程安全:都不是线程安全的
  1. 初始容量:默认 16,负载因子 0.75
  1. 遍历顺序:不保证顺序

七、总结对比表

特性HashSetHashMap
存储内容值(元素)键值对
重复性不允许重复key 不允许重复
时间复杂度O(1) 平均O(1) 平均
主要用途去重、查找映射、计数
常用方法add, contains, removeput, get, containsKey
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/7 23:36:44

如何在数据科学领域晋升

原文&#xff1a;towardsdatascience.com/how-to-get-promoted-in-data-science-b857ad73d020 现在&#xff0c;不吹牛地说&#xff0c;今年早些时候&#xff0c;我晋升了&#xff01;&#xff01;&#xff01; 我从本质上的一名初级数据科学家成长为现在的中级数据科学家。我…

作者头像 李华
网站建设 2026/4/14 11:28:38

GPT-SoVITS语音克隆可用于虚拟偶像直播配音?

GPT-SoVITS语音克隆可用于虚拟偶像直播配音&#xff1f; 在虚拟主播动辄百万粉丝、一场直播打赏破千万的今天&#xff0c;一个核心问题始终困扰着运营团队&#xff1a;如何让“她”既能24小时在线互动&#xff0c;又能始终保持甜美嗓音、情绪饱满地回应每一条弹幕&#xff1f;人…

作者头像 李华
网站建设 2026/4/15 8:07:54

no stlink detected处理全攻略:项目应用经验分享

一招解决“no stlink detected”&#xff1a;从踩坑到精通的实战笔记去年在做一个工业网关项目时&#xff0c;我连续三天卡在一个看似低级的问题上——电脑死活识别不到ST-LINK调试器。设备管理器里要么是灰色问号&#xff0c;要么闪一下就消失&#xff1b;STM32CubeIDE提示“T…

作者头像 李华
网站建设 2026/4/11 15:28:11

只需1分钟语音样本!GPT-SoVITS实现高质量语音克隆与TTS合成

只需1分钟语音样本&#xff01;GPT-SoVITS实现高质量语音克隆与TTS合成 在短视频创作、虚拟主播兴起的今天&#xff0c;你是否曾想过&#xff1a;只需一段简短录音&#xff0c;就能让AI用你的声音朗读任意文字&#xff1f;这不再是科幻场景——借助 GPT-SoVITS&#xff0c;仅凭…

作者头像 李华
网站建设 2026/4/15 8:57:36

GPT-SoVITS语音合成与情绪识别系统联动方案

GPT-SoVITS与情绪识别融合&#xff1a;打造有“情感”的个性化语音引擎 在虚拟主播声情并茂地讲述故事、客服机器人察觉用户不满自动切换安抚语调的今天&#xff0c;AI语音早已不再满足于“把文字读出来”。真正打动人的交互&#xff0c;是能听懂情绪、懂得共情的声音。而实现这…

作者头像 李华
网站建设 2026/4/13 23:19:30

基于开发板的LED控制设计:实战案例演示

点亮第一颗LED&#xff1a;从GPIO到PWM的嵌入式控制实战你有没有过这样的经历&#xff1f;手握一块开发板&#xff0c;连上电脑&#xff0c;打开IDE&#xff0c;却不知从何下手——直到你在代码里写下digitalWrite(LED_PIN, HIGH)&#xff0c;看着那颗小小的LED突然亮起&#x…

作者头像 李华