前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HashMap 和 HashSet 区别

HashMap 和 HashSet 区别

作者头像
happyJared
发布2019-06-15 19:16:38
1.5K0
发布2019-06-15 19:16:38
举报
文章被收录于专栏:happyJared

看过 HashSet 源码的人就应该知道:HashSet 底层就是基于 HashMap 实现的。(HashSet 的源码非常非常少,除了 clone()、writeObject()、readObject() 是 HashSet 本身实现之外,其他方法都是直接调用 HashMap 中的方法。

HashMap

HashSet

实现 Map 接口

实现 Set 接口

存储键值对

仅存储对象

调用 put() 向 map 中添加元素

调用 add() 方法向 Set 中添加元素

HashMap 使用键 (key) 计算 hashcode

HashSet 使用成员对象来计算 hashcode 值,对于两个对象来说,hashcode 可能相同,所以 equals() 方法从是用来判断对象的相等性

HashSet 如何检查重复

当对象 add() 入 HashSet 时,会先计算对象的 hashcode 值,来判断对象加入的位置,同时也会与其他加入的对象的 hashcode 值作比较;如果没有相符的 hashcode,HashSet 会假设对象没有重复出现;但如果发现有相同 hashcode 值的对象,这时会调用 equals() 方法来检查 hashcode 相等的对象是否真的相等。如果两者相同,HashSet 就不会让加入操作成功。

hashCode() 与 equals() 的相关规定
  1. 如果两个对象相等,则 hashcode 也相同;
  2. 如果两个对象相等,调用 equals() 方法返回true;
  3. 如果两个对象有相同的 hashcode,那它们也不一定是相等的;

综上,equals() 方法被覆盖过,则 hashCode() 方法也必须被覆盖;hashCode() 的默认行为,是对堆上的对象产生独特值,如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)。

== 与 equals() 的区别

==是指引用是否相同,是对内存地址进行比较; equals()指的是值是否相同,是对字符串的内容进行比较。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.06.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HashSet 如何检查重复
  • hashCode() 与 equals() 的相关规定
  • == 与 equals() 的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档