复杂对象图的快速哈希码

2023-12-12

我有一个漂亮的复杂的物体我需要得到独特性这些物体。一种解决方案可以通过重写来完成GetHashCode()。我已经实现了如下代码:

public override int GetHashCode()
{
    return this._complexObject1.GetHashCode() ^
           this._complexObject2.GetHashCode() ^
           this._complexObject3.GetHashCode() ^
           this._complexObject4.GetHashCode() ^
           this._complexObject5.GetHashCode() ^
           this._complexObject6.GetHashCode() ^
           this._complexObject7.GetHashCode() ^
           this._complexObject8.GetHashCode();
}

这些复杂的物体也覆盖 GetHashCode()并且确实类似的操作.

我的项目需要这些对象的唯一性,我处理这些对象非常频繁地,还有里面的数据changes in 各种方式和地点.

我需要一种更快的方法来找到这些复杂对象的唯一性,这需要考虑表现 and memory.

提前致谢
Munim


鉴于您的评论,听起来您可能正在尝试依赖 GetHashCode在其自己的来确定唯一性。不要那样做。哈希值不是meant独一无二——这是注定的unlikely两个不相等的对象将散列到相同的值,但并非不可能。如果您尝试检查一组对象是否没有重复项,您将have也可以使用等于。

请注意,对哈希码使用 XOR 可能会使您更有可能发生哈希冲突,具体取决于所涉及的各个哈希值。特别是,它使任意两个相等的场“相互抵消”。我一般使用这种形式:

int hash = 17;
hash = hash * 31 + field1.GetHashCode();
hash = hash * 31 + field2.GetHashCode();
hash = hash * 31 + field3.GetHashCode();
hash = hash * 31 + field4.GetHashCode();
...
return hash;

...但即便如此,这肯定不能保证独特性。你应该使用GetHashCode()统治out相等,然后使用Equals检查任何潜在相等值的实际相等性。

现在你的问题提到了速度 - 这听起来像是使用分析器和一些基准测试的完美场所。你确定这是一个瓶颈吗?如果您有许多不同的类型都在计算哈希值,您是否发现其中哪一个是导致问题的最大因素?

一些优化将取决于您如何使用数据。如果您发现大量时间花费在重新计算您知道未更改的值的哈希值上,则可以缓存哈希代码...尽管当存在本身引用复杂对象的字段时,这显然会变得更加棘手。您可以缓存“叶节点”哈希值,特别是如果这些叶节点不经常更改(但它们的用法可能会有所不同)。

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

复杂对象图的快速哈希码 的相关文章

随机推荐

  • 为什么这个随机数生成器不是随机的? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么我的随机数生成器在 C 中不是随机的 随机数生成器没有按我计划的方式工作 C 我有这个方法来计算随机值 private double getMetrics SourceFile sf Rando
  • C 中的堆大小限制

    我对 C 程序的程序执行布局图中的堆有疑问 我知道所有动态分配的内存都是在动态增长的堆中分配的 但我想知道 C 程序的最大堆大小是多少 我只是附加一个示例 C 程序 这里我尝试为字符串分配 1GB 内存 甚至执行 memset includ
  • 在 VSTS 中显示代码分析警告

    I ve 设置静态代码分析在我的 Visual Studio Team Services 构建上 我正在为我的解决方案使用 MSBuild 构建步骤 在构建日志中 它显示了 999 多行以 warning 2017 11 09T13 52
  • MongoDB:与 ASP.NET MVC 应用程序连接

    我创建了一个 ASP NET MVC 5 应用程序 并将其托管在 IIS 7 上 我现在想开始在该应用程序中使用 MongoDB 数据库 我已经成功运行了 MongoDB Windows 服务 但我现在不知道下一步是什么 Namely i
  • 零截距模型的 lm() 中的 R 平方

    我经营一家lm 在 R 中 这是总结的结果 Multiple R squared 0 8918 Adjusted R squared 0 8917 F statistic 9416 on 9 and 10283 DF p value lt
  • 通过 SAS 从 ORACLE DB 导入 blob

    对每个人来说都是一天中的好时光 上周我在工作中遇到了一个巨大的问题 这是交易 我需要通过SAS从ORACLE数据库下载excel文件 blob 我在用 第一步我需要从oracle获取数据 我使用的构造 blob文件近100kb proc s
  • ace.js 和 Angular 的主题和模式路径推断问题

    抱歉 不幸的是 这个问题没有提供太多细节 因为我不确定到底需要什么来解释这个问题 首先 我正在尝试使用ng2 ace editor in my Angular应用 但我的设置并不标准 详细信息在另一个相关问题中 应用程序找不到 js 文件
  • 对非对象调用成员函数 rowCount()

    我的查询有问题 我最近转向 PDO 这对我来说有点新鲜 现在我需要在查询中使用 JOIN 从另一个表获取数据 而不需要执行两次 问题是 我收到此错误 Call to a member function rowCount on a non o
  • HashMap 持有重复的键

    在尝试时HashMap 我注意到一些奇怪的事情 运行 4 个线程 每个线程尝试将 key value 的键值从 0 到 9999 值设为常量字符串 当所有线程都完成后 map size 返回的值大于 10 000 这怎么发生的 这是否意味着
  • 为什么 C# 没有检测到 1970/1/1 处于 BST 之下?

    我正在使用第 3 方 API 该 API 将一天中的时间值返回为日期时间值 并填写 1970 年 1 月 1 日作为日期部分 所以对于凌晨 5 点 它会返回类似的内容1969 12 31T21 03 00 000 08 00 问题是 如果用
  • Gmail电子邮件发送c#

    当我尝试向同一电子邮件发送消息时 此代码有效 但在其他电子邮件中 则无法正常工作 var smtpClient new SmtpClient smtp gmail com Port 587 UseDefaultCredentials fal
  • 围绕 d3 地图投影创建弯曲边框

    我使用所示的 geoNaturalEarth1 在 d3 中创建了一张世界地图here 我使用带有此投影的 geojson 世界地图来获取地图 如下面的代码所示 然而 这表明各国漂浮在太空中 没有边界 我想在地图投影周围绘制边框 使其看起来
  • 将行开头的所有制表符匹配并替换为四个空格

    我在网站上阅读了一些其他问题和答案 但它们都与我所寻求的有点不同 用四个空格替换字符串开头的所有制表符 到目前为止我尝试过的 let m t tsomething t 查找标签并不难 t g 但这会得到不在行首的制表符 所以使用m matc
  • 如何在 Jupyter 笔记本中以编程方式生成 Markdown 输出?

    我想在 Jupyter 笔记本中写一份课程报告 我想计算一些东西 生成一些结果并将它们包含在降价中 我可以将单元格的输出设置为降价吗 我想要这样的命令 print phi 生成 phi 符号 就像在 Markdown 中一样 换句话说 我想
  • 关闭 Visual Studio 中的漂亮列表

    我有一个宏 插件 我需要在其中禁用 Vb Net漂亮的清单暂时的 尝试录制宏 但它只显示我打开了选项对话框 也尝试过 Dim props As EnvDTE Properties DTE Properties TextEditor Basi
  • GitLab CI 的 Docker 构建作业参数无效

    所以我正在尝试设置我的 Gitlab CI 来触发一个作业git push构建和部署我的 Docker 这是 gitlab ci yml我正在使用的文件基于 Gitlab 文档 Elixir yml 中的示例 stages build bu
  • 获取有关 WCF 中需要很长时间的方法的进度信息的有效模式?

    我想要获取有关 WCF 上调用的方法的进度更新 例如 我运行 1000 个查询并想知道当前状态 如果双工合约在您的环境中不可行 您将不得不诉诸轮询 您的初始方法可以返回一个标识符 可能是 GUID 然后您可以对另一个方法进行后续调用以检查进
  • 如何在Mac上运行shell命令?

    如何使用 Excel VBA 代码运行 shell 命令 我想跑chmod x Users asdasd Music playlistLoad sh穿过外壳 我使用 Python 实现了这一点os system Command here 在
  • 如何在 C# 中进行参数化 SELECT 查询?

    我正在尝试使用 DataGridView 以及 C 和 SQL Server 中的参数化查询来显示数据库中表中的数据 到目前为止 我已经尝试过这段代码 private void button1 Click object sender Eve
  • 复杂对象图的快速哈希码

    我有一个漂亮的复杂的物体我需要得到独特性这些物体 一种解决方案可以通过重写来完成GetHashCode 我已经实现了如下代码 public override int GetHashCode return this complexObject