为什么HashMap比HashSet快?

2024-03-14

我一直在阅读/研究原因HashMapHashSet.

我不太明白以下说法:

  1. HashMapHashSet因为这些值与唯一的键相关联。

  2. In HashSet,成员对象用于计算两个对象的哈希码值可以相同,因此equals()方法用于检查相等性。如果返回的话false,这意味着两个对象是不同的。在HashMap,使用 key 对象计算 hashcode 值。

  3. The HashMaphashcode 值是使用 key 对象计算的。这里,成员对象是用来计算hashcode的,两个对象的hashcode可以是相同的,所以equals()方法用于检查相等性。如果返回的话false,这意味着两个对象是不同的。

总结我的问题:

  1. 我想HashMap and HashSet以同样的方式计算哈希码。为什么它们不同?

  2. 你能提供一个具体的例子吗HashSet and HashMap计算哈希码的方式不同?

  3. 我知道什么是“关键对象”,但是“成员对象”是什么意思?

  4. HashMap可以做同样的事情HashSet,而且速度更快。为什么我们需要HashSet?例子:

    HashMap <Object1, Boolean>= new HashMap<Object1, boolean>();
    map.put("obj1",true);  => exist
    map.get("obj1");  =>if null = not exist, else exist
    

表现:

如果您查看 HashSet 的源代码(至少是 JDK 6、7 和 8),它在内部使用 HashMap,因此它基本上完全按照您对示例代码所做的操作。

因此,如果您需要 Set 实现,则使用 HashSet,如果您需要 Map - HashMap。使用 HashMap 而不是 HashSet 的代码将具有与直接使用 HashSet 完全相同的性能。

选择正确的集合

映射 - 将键映射到值(关联数组) -http://en.wikipedia.org/wiki/Associative_array http://en.wikipedia.org/wiki/Associative_array.

Set - 不包含重复元素的集合 -http://en.wikipedia.org/wiki/Set_(computer_science) http://en.wikipedia.org/wiki/Set_(computer_science).

如果您需要集合的唯一目的是检查其中是否存在元素 - 请使用 Set。您的代码将更清晰,更容易被其他人理解。

如果您需要为元素存储一些数据 - 使用 Map。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么HashMap比HashSet快? 的相关文章

  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 如何使用 Java 处理 Selenium WebDriver 中的新窗口?

    这是我的代码 driver findElement By id ImageButton5 click Thread sleep 3000 String winHandleBefore driver getWindowHandle drive
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • Cassandra java驱动程序协议版本和连接限制不匹配

    我使用的java驱动程序版本 2 1 4卡桑德拉版本 dsc cassandra 2 1 10cql 的输出给出以下内容 cqlsh 5 0 1 Cassandra 2 1 10 CQL spec 3 2 1 Native protocol
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • 欧洲中部时间 14 日 3 月 30 日星期五 00:00:00 至 日/月/年

    我尝试解析格式日期Fri Mar 30 00 00 00 CET 14至 日 月 年 这是我的代码 SimpleDateFormat formatter new SimpleDateFormat dd MM yyyy System out
  • 如何在JSTL中调​​用java方法? [复制]

    这个问题在这里已经有答案了 这可能是重复的问题 我只想调用不是 getter 或 setter 方法的方法例如 xyz 类的 makeCall someObj stringvalue Java类 Class XYZ public Strin
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • Eclipse 中 Spring MVC 模型对象的 (jsp /jstl) 视图中的代码辅助

    在 Spring MVC 中 当将对象放置在视图模型中时 如下所示 public String getUser Model model fetch user model addAttribute user user return viewN
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树

随机推荐

  • 如何让子组跨越三列?

    我正在尝试做什么 在我的报告中 我试图在 tablix 中获取一些基本数据 在这个 tablix 中有一个主要的summary行和detail里面有行 我想要做的是将详细信息放在子行中 但分为三列 例如我的 tablix 现在看起来像这样
  • 如何在 .Net Core ActionFilterAttribute 中使用依赖注入?

    身份验证所需属性类 public class AuthenticationRequiredAttribute ActionFilterAttribute ILoginTokenKeyApi loginTokenKeyApi IMemoryC
  • 使用 TensorFlow 进行训练和预测出了什么问题?

    请看下面写的代码 x tf placeholder float None 80 W tf Variable tf zeros 80 2 b tf Variable tf zeros 2 y tf nn softmax tf matmul x
  • 从事件返回一个值——这方面有好的实践吗?

    我正在做一个使用异步 TCP 套接字的小型多线程应用程序 但我会说到重点 我正在使用自定义事件从表单读取值 并且事件使用的委托在完成时返回一个字符串 我的问题是 这是正确的吗 可以从事件中返回值吗 或者有更好的方法来做到这一点吗 就像使用表
  • 从Python中的非线性方程组中找到复​​数根

    我一直在测试一种已在文献中发表的算法 该算法涉及在 Matlab 和 Python 中求解一组 m 非线性方程 非线性方程组涉及包含复数的输入变量 因此所得解也应该是复数 到目前为止 我已经能够通过使用以下代码行在 Matlab 中获得相当
  • 将附件上传到 azure devops [REST API]

    我很难通过 api 在我的 azure devops 存储库中添加附件 public static void putAttachments Integer id try URL url new URL https dev azure com
  • HtmlService 表不支持电子表格中的换行符和超链接

    我正在编写 Google Apps 脚本 以使用 HtmlService 将电子表格中的数据显示到 HTML 表中 但我面临以下两个挑战 如果电子表格单元格值中有换行符 表格会将其显示为单行 如果电子表格单元格具有超链接 例如链接到 Goo
  • XmlElement(name="custom_name") 在与其余服务集成的 Spring Boot 中不起作用

    我对休息服务世界几乎是新手 在这里我试图更改输出 xml 中显示的字段名称 不确定 我是否遵循正确的方法 任何帮助都是一件好事 活动 java import javax xml bind annotation XmlAccessType i
  • 为什么 Windows 为其系统地址空间保留 1Gb(或 2Gb)?

    众所周知 Windows 应用程序在 32 位系统上通常有 2Gb 的私有地址空间 使用 3Gb 开关可以将该空间扩展到 3Gb 操作系统自行保留剩余的 4Gb 我的问题是为什么 在内核模式下运行的代码 即设备驱动程序代码 有自己的地址空间
  • DCPCrypt/Delphi 未正确编码 Rijndael

    我有 DCPCrypt 包 最新版本 并尝试在 Delphi2007 中使用来自 NIST 分发的 AES 已知答案测试 KAT 向量的测试值进行 AES Rijndael CBC 编码 128 位块 256 位密钥 一个样本测试向量 KE
  • 具有符合协议的惰性、私有属性的 Swift Struct

    首先 我有一个仅定义一些只读属性的协议 例如 protocol Example var var1 String get var varArray String get 然后我想创建一个符合该协议的结构 我遇到的问题是我有两个相互冲突的要求
  • Firestore 查询具有多个值的循环

    我正在尝试使用字符串中保存的数据检索多个 Firestore 文档 这个想法是 对于数组中的每个值 我将使用 Firestore 查询来检索与该查询匹配的文档并将其推送到另一个数组 我在实现此目标时遇到了一些问题 到目前为止我已经尝试过 e
  • “Microsoft VBScript 运行时错误‘800a000d’‘800a000d’

    我有下一个代码 其工作原理如下 从url接收一些参数 将此数据插入名为 clients 的表中 然后我选择客户表中最后引入的数据 最后 它尝试将此数据插入到另一个名为 users 的表中 但我收到这个错误 Microsoft VBScrip
  • 在 jQuery.load() 上对容器的高度进行动画处理

    我正在使用 container div load url 通过 ajax 填充 div 我想将高度设置为返回内容的高度 但真的不知道如何实现这一点 我尝试过使用这样的东西 main fadeOut function main load ur
  • 由于文件 libmpi.so.1 丢失而出错

    我使用 Omnet 和 Veins 进行模拟 直到我昨晚从 Ubuntu 15 升级到 16 04 LTS 之前它都工作正常 现在 我在尝试运行模拟时收到以下错误 error while loading shared libraries l
  • 语音识别监听器在 Galaxy SII 中不起作用

    我正在开发一个Android应用程序 它总是监听用户的声音 当我在 Sony X10i 上运行时它可以工作 但在 Samsung Galaxy SII 上则不起作用 这是我的代码 SpeechRecognizer speechRecogni
  • Android比较imageView和image

    我想将当前 imageView 与 R drawable 中的图像进行比较 我想我已经尝试了一切 但我无法解决这个问题 我尝试了堆栈溢出的所有方法 XML
  • npm 安装失败,出现 make not found 错误

    当我尝试在 Nodejs 服务器上安装时间时 出现以下错误 email protected cdn cgi l email protection install var www track node modules time node gy
  • 如何使用 OpenGL ES 2.0 着色器完成这些图像处理任务?

    如何使用 OpenGL ES 2 0 着色器执行以下图像处理任务 色彩空间变换 RGB YUV HSL Lab 图像的旋转 转换为草图 转换为油画 我刚刚向我的开源添加了过滤器GPU图像框架 https github com BradLar
  • 为什么HashMap比HashSet快?

    我一直在阅读 研究原因HashMap比HashSet 我不太明白以下说法 HashMap比HashSet因为这些值与唯一的键相关联 In HashSet 成员对象用于计算两个对象的哈希码值可以相同 因此equals 方法用于检查相等性 如果