首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有^的GetHashCode()

带有^的GetHashCode()
EN

Stack Overflow用户
提问于 2012-05-23 00:06:57
回答 5查看 3.6K关注 0票数 8

GetHashCode()函数使用contains ^ symbol返回的代码返回某些内容时,是否有特殊的含义

代码语言:javascript
复制
public class ClassProp
{
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
    public int Prop3 { get; set; }
    public int Prop4 { get; set; }
    public int Prop5 { get; set; }

    public override int GetHashCode()
    {
        return Prop1.GetHashCode() ^ Prop2.GetHashCode() ^ 
               Prop3.GetHashCode() ^ Prop4.GetHashCode() ^ Prop5.GetHashCode();
    }
}
EN

回答 5

Stack Overflow用户

发布于 2012-05-23 00:08:05

^是C# XOR operator。它没有什么特别之处,只是所有类属性的哈希码都被XOR运算在一起了。

编辑GetHashCode返回一个通用代码,用作复杂对象的简写标识符。当您想要存储对象,然后根据它们的散列代码快速检索它们时,一个常见的用法是对数据结构进行散列。假设有一个类Person和一些具有相应哈希码的对象:

代码语言:javascript
复制
Alex 8540
John 9435
Peter 2453

这些代码是基于每个对象的一些或所有字段生成的,并且必须尽可能少发生冲突,以确保有效的散列。现在我们可以使用哈希码将对象存储在哈希表中:

代码语言:javascript
复制
Entries
0 -> Alex
1 -> John
2 -> Peter

对象被存储在表中,使用它们各自的散列码来确定位置。接下来,可以使用相同的散列代码轻松地检索它们。

我建议你找到一些关于哈希表如何工作的文献,因为在一篇文章中解释它有点太多了。

票数 7
EN

Stack Overflow用户

发布于 2012-05-23 00:07:54

那只是bitwise xor operator。它通常用于将来自不同对象的散列码组合成单个整体散列码。

在谷歌上搜索它不是最容易的事情之一!在搜索这些东西时,我的建议是查看table of all operators

票数 4
EN

Stack Overflow用户

发布于 2012-05-23 00:12:34

那是bitwize XOR operator

这是实现GetHashCode时使用的一个非常常见的运算符。

话虽如此,在这种情况下,这种实现可能并不理想。使用XOR (单独)的问题是,您不一定会减少冲突的机会。问题是,像这样定义的类:

代码语言:javascript
复制
class Foo
{
    public int Bar { get; set; }
    public int Baz { get; set; }

    // ...
    public override int GetHashCode()
    {  return this.Bar.GetHashCode() ^ this.Baz.GetHashCode(); }
}

将在Bar==2和Baz==4时创建与Bar==4和Baz==2时相同的哈希代码。根据使用情况,这可能会导致更多哈希冲突,因此在实现GetHashCode时需要注意这一点。另外,当你创建一个像这样的可变类型时,你应该非常小心你的散列代码实现是否匹配你的相等性检查,等等。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10705816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档