实现 GetHashCode [重复]

2023-11-22

可能的重复:
重写 System.Object.GetHashCode 的最佳算法是什么?

怎样才是 GetHashCode 方法的良好实现?我做了一些谷歌搜索,发现了一些好话(MSDN),但似乎逻辑只是操作存储为类中字段的两个数字。实现这个方法的实际逻辑有这么简单吗?


最低要求是任何给定值的哈希码都应该相同。所以,这个实现是有效的,但分布很糟糕:

public override int GetHashCode() {
  return 1;
}

为了达到最佳效果,哈希码应考虑对象中的所有相关数据,并尽可能均匀地分布在整数范围内。

在 System.Drawing.Point 结构中可以找到考虑所有成员但没有提供很好分布的实现。它使用 XOR 来组合成员中的位,这意味着 X 和 Y 相等的所有点的哈希码为零:

public override int GetHashCode() {
  return this.X ^ this.Y;
}

获得更好分布的一种方法是将一个成员乘以素数并添加下一个成员,根据需要重复:

public override int GetHashCode() {
  return ((this.Value1 * 251) + this.Value2) * 251 + this.Value3;
}

简单的随机生成器也使用了相同的方法,因为它可以很好地分散值。

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

实现 GetHashCode [重复] 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi

随机推荐

  • Double.ToString() 何时返回科学计数形式的值?

    我认为它与前导零或尾随零的数量有关 但我在 msdn 中找不到任何可以给我具体答案的内容 在什么时候Double ToString CultureInfo InvariantCulture 开始以科学记数法返回值 从文档中Double To
  • 使用 IOS 8.3 的 Safari 上的 Angular ng-click 问题

    这是一个奇怪的问题 很难产生和探索 在使用 Angular 构建 Web 应用程序时 我的老板发现应用程序上的所有按钮都使用ng click指令不起作用 现在 这个问题只发生在iphone 6 with IOS 8 3 and using
  • 使用nodejs gcloud api移动/重命名Google Cloud Storage中的文件夹

    我正在尝试使用 gcloud api 重命名或移动 google 云存储中的文件夹 类似的问题解释了如何删除文件夹 使用nodejs gcloud api删除Google Cloud Storage中的文件夹 但是如何重命名文件夹呢 或转向
  • 使用C#从USB读取数据?

    我不想读取串行端口或其他可能的简单快捷方式 我想知道如何使用 C 读取笔记本电脑中的 USB 端口 无论您是否可以推荐一个网站或解释一下流程的流程 我将非常感谢您的帮助 如果你想做 USB 开发 Jan Axelson 的 USB Comp
  • Combobox Cascading 需要更具体的cascadeFrom 选项

    我想使用 Kendo UI ComboBox 的 CascadeFrom 功能 但令我沮丧的是 该选项似乎只接受 ID 现在我无法使用该 ID 因为组合框是动态添加的 并且可能多次添加 从而导致多个控件具有相同的 ID 有谁知道如何将特定的
  • hprof 中“无引用”的对象

    我正在调查一个hprofVisualVM 中的文件 服务器运行 JDK 1 4 2 30 并具有 1 GB 堆 NewSize 为 200 Mb hprof 显示 56000 个实例占用了 71 的堆int 在 VisualVM 中查看时
  • 现在允许使用 Instagram API 上传视频吗?

    据 Instagram 报道文档 Instagram 仅允许 API 上传图像 JPG PNG 一款名为 Cinamatic 的新 iPhone 应用程序允许用户通过 Cinamatic 登录 Instagram 后将视频上传到 Insta
  • Android Studio w/gradle:包 r 不存在

    最终编辑 这是一个很长的问题 需要进行多次编辑 而且我不一定在每一步都做正确的事情 对于任何偶然发现这个问题并且在 Android Studio 中将项目转换为 gradle 时遇到困难的人 我建议检查一下这个存储库中提到的问题 16718
  • 如何让 Powermock 与 Dexmaker 配合使用

    我正在尝试合并动力模拟使用以下 build gradle 配置作为我的 Android 测试的依赖项 dependencies compile com android support appcompat v7 21 0 androidTes
  • `exec':字符串包含空字节(ArgumentError)

    cmd snv co rep username svn user password pxs puts cmd this code wotks and prints all vars values normally exec cmd xpto
  • 无法为 Android 教程构建 GStreamer

    我在尝试构建 GStreamer Android 教程时遇到了许多问题 我的环境是 Mac OS X 7 Android SDK 版本 17 安卓NDK 8d 我能够在 Eclipse 中和命令行中构建和运行 NDK 示例 我已经下载了ht
  • YAML 预处理器/宏处理器

    有没有一种简单的方法可以将预处理器 宏处理器与 YAML 文件一起使用 即我正在考虑类似于 C 预处理器的东西 我们有很多描述各种数据结构的平面文本文件 它们目前采用我们自己的内部格式 并使用内部解析器读取 我想切换到 YAML 文件以利用
  • SQLCLR 和 DateTime2

    使用 SQL Server 2008 Visual Studio 2005 net 2 0 SP2 支持新的 SQL Server 2008 数据类型 我正在尝试编写一个 SQLCLR 函数 该函数将 DateTime2 作为输入并返回另一
  • 如何正确处理UnsafeMutablePointer

    我有点困惑 我什么时候必须调用 free 以及何时 destroy dealloc 我正在编写一个学习核心音频的简短代码片段 我想如果我打电话UnsafeMutablePointer
  • iPhone-Twitter API 获取用户关注者/正在关注

    我希望能够使用适用于 ios 5 的 Twitter API 将所有用户关注者和关注用户名放入NSDictionary 但我遇到了障碍 我不知道如何使用 Twitter API 来执行此操作 但我的主要问题是首先获取用户的用户名 当我什至不
  • 为什么 PHP 的自动加载功能在 CLI 模式下不起作用?

    这更多的是为了我自己的个人启发 但是 这是一直困扰我的事情 为什么 PHP 在 CLI 模式下不能执行 自动加载 我多年来一直在阅读此免责声明 但我从未读过任何涉及原因的内容 http php net manual en language
  • 如何创建简单的 Typescript 元数据注释

    我有一些字段需要在发送到服务器端之前进行格式化 所以 我想使用自定义序列化器序列化我的打字稿类的一些字段 这样的事情是理想的 export class Person serializeWith MyDateSerializer privat
  • 使用带有一个附加参数的函数的 map() 的 JS 回调[重复]

    这个问题在这里已经有答案了 我正在尝试找到一种使用 JS 的方法Array prototype map 具有一个附加参数的函数的功能 如果可能的话 我想avoid必须重写内置的Array prototype map 该文档非常好 但没有涵盖
  • JavaScript 中 new Boolean() 的用途是什么?

    有什么用 var flag new Boolean false 相比 var flag false 你什么时候真正使用new Boolean 全局函数Boolean 可以在没有调用时用于类型转换new eg var foo Boolean
  • 实现 GetHashCode [重复]

    这个问题在这里已经有答案了 可能的重复 重写 System Object GetHashCode 的最佳算法是什么 怎样才是 GetHashCode 方法的良好实现 我做了一些谷歌搜索 发现了一些好话 MSDN 但似乎逻辑只是操作存储为类中