标签: hash-code-uniqueness

为什么'397'用于ReSharper GetHashCode覆盖?

像许多人一样,我使用ReSharper来加速开发过程.当您使用它来覆盖类的相等成员时,它为GetHashCode()生成的代码生成如下所示:

    public override int GetHashCode()
    {
        unchecked
        {
            int result = (Key != null ? Key.GetHashCode() : 0);
            result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
            result = (result * 397) ^ ObjectId;
            return result;
        }
    }
Run Code Online (Sandbox Code Playgroud)

当然我有一些自己的成员,但我想知道的是为什么397?

  • 编辑:所以我的问题会更好措辞,因为它是一个特殊的关于397素数除了它是素数?

resharper hash hash-code-uniqueness

145
推荐指数
3
解决办法
2万
查看次数

在字符串上调用GetHashCode()时获取重复值的概率

我想知道GetHashCode()string实例上调用方法时获取重复值的可能性.例如,根据这篇博文, blairbrainlessness在x86机器上具有相同的哈希码(1758039503).

c# hash-code-uniqueness hashcode hash-collision

22
推荐指数
4
解决办法
6078
查看次数

具有不同文件大小的哈希冲突是否与文件大小相同?

我正在散列大量文件,并且为了避免哈希冲突,我还存储了文件的原始大小 - 这样,即使存在哈希冲突,文件大小也几乎不可能相同.这是声音(哈希冲突同样可能是任何大小),或者我是否需要另一条信息(如果碰撞更可能与原始信息的长度相同).

或者,更一般地说:无论原始文件大小如何,每个文件是否都可能产生特定的哈希值?

hash hash-code-uniqueness hash-collision

9
推荐指数
2
解决办法
3612
查看次数

Java为两个可互换的整数重写equals()和hashcode()

我重写了两个int的简单容器对象的equals和hashcode方法.每个int都反映了另一个对象的索引(该对象是什么并不重要).该类的要点是表示两个对象之间的连接.

连接的方向无关紧要,因此无论两个整数在对象中的哪个方向,equals方法都应该返回true.

connectionA = new Connection(1,2);
connectionB = new Connection(1,3);
connectionC = new Connection(2,1);

connectionA.equals(connectionB); // returns false
connectionA.equals(connectionC); // returns true
Run Code Online (Sandbox Code Playgroud)

这是我所拥有的(从Integer的源代码修改):

public class Connection {
    // Simple container for two numbers which are connected.
    // Two Connection objects are equal regardless of the order of from and to.

    int from;
    int to;

    public Connection(int from, int to) {
        this.from = from;
        this.to = to;
    }

    // Modifed from Integer source code
    @Override
    public boolean equals(Object obj) {
        if …
Run Code Online (Sandbox Code Playgroud)

java hash-code-uniqueness equals hashcode

9
推荐指数
2
解决办法
2819
查看次数

Tinyurl风格的独特代码:防止冲突的潜在算法

我有一个系统,需要一个唯一的6位数代码来表示一个对象,我正在考虑一个很好的算法来生成它们.以下是预先要求:

  • 我正在使用基础20系统(没有帽子,数字,元音或l来防止混淆和顽皮的话)
    • base-20允许6400万种组合
  • 我将一次插入5-10万个条目,所以理论上我会使用批量插入,这意味着使用一个唯一的密钥可能不会有效或漂亮(特别是如果开始出现大量冲突)
  • 填满10%的组合并不是不可能的,因此很有可能发生大量碰撞
  • 我想确保代码是非连续的

我有一个想法听起来像它会工作,但我在数学上不够好,无法弄清楚如何实现它:如果我从0开始并增加N,然后转换为基数20,似乎应该是N的一些值,让我可以在重复任何值之前计算0-63,999,999中的每个值.

例如,使用N = 3(因此10 mod 3)从0到9:0,3,6,9,2,5,8,1,4,7.

是否有一些神奇的数学方法可以计算出一些较大数字的N值,这些数值能够计算整个范围而不重复?理想情况下,我选择的数字会在集合周围跳跃,这样就不会有明显的模式,但我不确定它是多么可能.

或者,一个保证0-64百万的唯一性的散列算法可以工作,但我太愚蠢了,不知道这是否可行.

language-agnostic puzzle algorithm math hash-code-uniqueness

7
推荐指数
1
解决办法
1704
查看次数

是否存在可以保证哈希算法唯一的情况?

如果我使用比数据(例如sha-256)更大的字节大小的散列算法散列大小受限的类似数据(例如社会安全号),那么散列将保证与单词相同的唯一性级别.原始数据?

hash hash-code-uniqueness unique sha256

7
推荐指数
3
解决办法
4776
查看次数

如何从三个long生成哈希码

我有一个坐标为键的HashMap.

坐标有3个长度,保持x,y和z坐标.(坐标是并且需要是一个自定义类,坐标需要很长).

现在我希望能够通过以下方式访问例如字段[5,10,4] : hashMap.get(new Coordinate(5, 10, 4)).

我已经实现了equals方法,但这还不够,因为显然我还需要为hashCode提供一个实现.所以我的问题是我如何从三个长度生成一个独特的hashCode?.

附加:使用外部库中的哈希生成器不是选项.

java hash-code-uniqueness hashcode

6
推荐指数
2
解决办法
7986
查看次数

动态完美散列和通用散列函数 - 请解释一下?

所以我正在阅读有关哈希表,哈希函数等的内容.我很感兴趣在维基百科上阅读"动态完美哈希"如何使用第二个哈希表作为数据结构来存储特定存储桶中的多个值.

然而,当我遇到如何选择通用散列函数来执行第二个散列表的散列时.任何人都可以解释这个通用哈希函数是如何根据存储在存储桶中的值确定的?我模糊地遵循维基百科的"通用哈希函数"页面中的推理和逻辑,但我很难对它有任何直觉.特别是,这些功能如何保证不发生冲突?或者至少,如果它们被处理掉并且如果检测到碰撞就会产生新的一个,我们怎么知道这可以在实际的时间内完成呢?

瓢虫书的解释好吗?

hash hash-function hash-code-uniqueness hashtable hashcode

5
推荐指数
1
解决办法
3372
查看次数

这个哈希函数会异常频繁地发生冲突吗?

我有以下代码来生成对象的哈希:

public int GetHashCode(MyType obj)
{
   return (obj.Prop1.GetHashCode() + obj.Prop2.GetHashCode() + obj.Prop3.GetHashCode()).GetHashCode();
}
Run Code Online (Sandbox Code Playgroud)

即我添加所有属性的哈希码,然后获取此哈希值.

在审查中,一位同事建议这将过于频繁地发生碰撞.我不确定这是真的,因为:

  1. 鉴于在正数和负数之间选择具有相同频率的哈希码并且它们环绕,我认为我们没有获得关于这些数字的总和与数字本身相对的可能性的任何额外信息.
  2. 如果它们的和是非随机的,则哈希码被设计成使"靠近在一起"的数字变得"相距很远",因此将非均匀分布的值馈入函数应该不是问题

谁是对的?

它是在C#中,以防答案是特定于语言的.

c# hash hash-code-uniqueness hash-collision

5
推荐指数
1
解决办法
174
查看次数

Point类的Java hashCode

我有一个简单的自定义Point类,如下所示,我想知道我的hashCode实现是否可以改进,或者这是否是最好的.

public class Point 
{
    private final int x, y;

    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }

    public int getX() 
    {
        return x;
    }

    public int getY()
    {
        return y;
    }

    @Override
    public boolean equals(Object other) 
    {
        if (this == other)
          return true;

        if (!(other instanceof Point))
          return false;

        Point otherPoint = (Point) other;
        return otherPoint.x == x && otherPoint.y == y;
    }


    @Override
    public int hashCode()
    {
        return (Integer.toString(x) + "," + Integer.toString(y)).hashCode(); …
Run Code Online (Sandbox Code Playgroud)

java hash-code-uniqueness hashcode

5
推荐指数
2
解决办法
9577
查看次数