问题标签 [hash-code-uniqueness]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
180 浏览

c# - 这个哈希函数会异常频繁地碰撞吗?

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

即,我添加了所有属性的哈希码,然后对其进行哈希处理。

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

  1. 鉴于在正数和负数之间以相同的频率选择哈希码并且它们环绕,我认为我们没有获得任何关于这些数字总和的可能性的额外信息,而不是数字本身
  2. 如果它们的总和是非随机的,哈希码旨在使“靠近”的数字变得“相距甚远”,因此将非均匀分布的值输入函数应该不是问题

谁是正确的?

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

0 投票
5 回答
339 浏览

java - 这是生成哈希码的好方法吗?

我必须在以下两个条件下编写一个哈希函数:

  • 我不知道Object o传递给方法的任何信息——它可以是字符串、整数或实际的自定义对象;
  • 我根本不允许打电话hashCode()

我现在使用的方法来计算哈希码:

  1. 将对象写入字节流;
  2. 将字节流转换为字节数组;
  3. 循环遍历字节数组并通过执行以下操作计算哈希:

    哈希 = 哈希 * PRIME + byteArray[i]

我的问题是这是一种可以接受的方法,有没有办法改进它?就我个人而言,我觉得这个功能的范围太广了——没有关于对象是什么的信息,但在这种情况下我几乎没有发言权。

0 投票
6 回答
7785 浏览

c# - 对字符串调用 GetHashCode() 时获得重复值的概率

我想知道在实例上调用GetHashCode()方法时获得重复值的概率。string例如,根据这篇博 blair文,brainlessness在 x86 机器上具有相同的哈希码 (1758039503)。

0 投票
2 回答
1672 浏览

java - 设置哈希码和等于以创建具有唯一对象的集合

我会创建一个只包含.for的Set确切内容, 但这些s 不是由原始类型表示的,但我有一个对象HashSetchara,b,c,d,e,f,g...char

现在我想将对象添加FirstChar到一个集合中,但为了避免重复的元素,我必须实现HashCode()equals()

我知道如何实现equals,但我如何才能hashcode以我只能在集合中只有一个元素的方式实现?

注意。请不要说我使用 Eclipse

0 投票
8 回答
12009 浏览

java - Point 类的 Java hashCode

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

0 投票
3 回答
1239 浏览

java - 我可以假设具有相同 System.identityHashCode 的两个对象是相同的吗?

尽管两个不同的对象可能具有相同的哈希码,但是,System.identityHashCode()似乎返回了对象的内存指针。我想 32 位 JVM 实现也不例外,包括 Sun JDK、Open JDK。不过,我没有检查源代码。在实践中,我可以假设两个相同的对象System.identityHashCode()是相同的吗?

0 投票
5 回答
236 浏览

java - 在 java 中传递对象时到底发生了什么?

我知道当我们传递对象时,我们将其引用作为值传递。但是你得到的这个值是使用hashcode()正确的方法(根据我的测试是一样的)?既然hashcode()不是内存地址,也不能保证一直获取唯一值,那么在传递对象的时候会不会发生碰撞之类的奇怪事情呢?

(假设hashcode()没有被覆盖,即它返回与 相同的值System.identityHashCode()

三个像这样的问题很多,但我找不到相关资源来讨论传递的值是什么以及如何获得它?

编辑: 这是我的测试。默认toSting()使用hashCode()内部并将其转换为十六进制值。那么当我们传递对象时,这是传递的值吗?或者 java 做了什么来跟踪所有的对象(被传递)所以不会有任何引用冲突

0 投票
3 回答
443 浏览

java - 具有 HashMap 支持的 contains() 方法的 Set 的准确性?

嗨,我正在使用由 HashMap 支持的 Set 来跟踪我已经在图中遍历了哪些边。我计划通过添加存储在每个边缘中的数据的哈希码的结果来键入集合。

但是,当使用 contains 检查边缘是否在集合中时,这有多可靠?难道我不能假设得到误报吗?有没有办法克服这个?

让我担心的确切说法是:

谢谢!

哦,顺便说一句,我正在使用 Java。

编辑:

我应该在问题中说明这一点。在我的图中,没有边对象,有顶点对象,每个顶点对象都包含更多顶点对象的列表,即边。因此,我想结合您的回答得出的问题是:

我可以使用 Set 来存储对信息的引用而不是对象......吗?即我可以存储为顶点的数据对象添加两个哈希码的结果吗?

编辑2:

我确实在为我的 hashmap 使用 Java 库,我将其声明如下:

0 投票
5 回答
3259 浏览

java - Java 覆盖两个可互换整数的 equals() 和 hashcode()

我正在为两个整数的简单容器对象覆盖 equals 和 hashcode 方法。每个 int 都反映了另一个对象的索引(无论该对象是什么)。类的重点是表示两个对象之间的连接。

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

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

这确实有效,但我的问题是:有没有更好的方法来实现这一目标?

我主要担心的是 hashcode() 方法将为任何两个乘以等于相同数字的整数返回相同的哈希码。例如

文档http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#hashCode()指出

如果根据 equals(java.lang.Object) 方法,如果两个对象不相等,则不需要对两个对象中的每一个调用 hashCode 方法都必须产生不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同的整数结果可能会提高哈希表的性能。

如果有人能看到一种减少匹配哈希码数量的简单方法,那么我将不胜感激。

谢谢!

蒂姆

PS 我知道有一个 java.sql.Connection 可能会导致一些导入烦恼。该对象实际上在我的应用程序中具有更具体的名称,但为简洁起见,我在此处将其缩短为 Connection。

0 投票
2 回答
518 浏览

guid - How to generate a document ID or Report ID of 8 characters in .net

Can someone point me to the preferred method for generating a report or document ID? I have been looking at maybe using a guid that would be reduced down to a shorter length. We have an application that creates an ID for reports that is about 8 characters long. They appear to be using some type of hash code. Probably using a base 36 encoding scheme. But I cant seem to find a way to make the hash code come out to a length of 8 characters since people have to use them to refer to the documents. They would also be used in a disconnected environment, so you couldnt look up the next usable serialized number in the chain. Just wondering what some of you use in applications like this?