问题标签 [hashcode]
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.
c# - php和c#中的hmac_sha256不同
这是我的 PHP 代码:
这是我的 C# 代码:
不幸的是,两个结果都不同。谁能给我一个提示?
hashcode - 具有可逆属性的校验和/哈希函数
我正在寻找具有以下属性的特定哈希码。我不知道任何这样的哈希码,我不知道是否有可能做这样的事情。只是想把它放在那里,看看人们怎么说。
我有两个数据库(松散使用的术语 - 不要想到 SQL 或类似的东西),一个主数据库和一个备份数据库。需要保持两个数据库同步并检测数据库何时不同步。与其验证那里的每个数据,不如保留一些可以验证的哈希码。但是这两个数据库不一定共享所有修改。由于从 master 到 backup 的更改是批处理的,因此从 master 到 backup 的某些修改可能会被折叠。
即:假设数据库的当前状态具有元素 A->X、B->Y 和 C->Z。现在 B 被修改为 B->Y1,然后是 B->Y2。从主服务器发送到备份服务器的唯一更改是 B->Y2。中间的 B->Y1 被跳过。
现在,与其循环遍历每个数据库中的每个元素以验证它们是否匹配,我们更愿意在两个位置保留元素的运行哈希码,然后进行比较。哈希码必须计算如下:
假设 hm0 的前一个哈希码:
hashcode hm1 = f(hm0, A->X, B->Y, C->Z)
当 B 现在发生变化时:
hashcode hm2 = f(hm1, B->Y1)
然后
hashcode hm3 = f(hm2, B->Y2)
所以master会有h3的hashcode。现在备份将不会收到修改 B->Y2,所以如果它计算一个运行哈希码,它将是这样的:
哈希码 hb1 = f(hb0, A->X, B->Y, C->Z)
哈希码 hb2 = f(hb1, B->Y2)
现在我们希望 hb2 和 hm3 匹配,因为数据库的当前状态是相同的。但是大多数(如果不是全部)哈希码都不是这样工作的。
所以我们想要的是,我们首先要从哈希中“移除”B->Y 的贡献,然后“添加”B->Y1 的贡献,然后移除 B->Y1 的贡献并添加B->Y2 对哈希码的贡献。所以我们想要这样的东西:
两个函数 f, g:f 通过添加新元素的贡献来修改现有的哈希码,而 g 通过删除元素的贡献来修改现有的哈希码。
在主机上:
hm1 = f(hm0, A->X, B->Y, C->Z)
当 B 修改为 B->Y1 时:
hm2 = g(hm1, B->Y)
hm3 = f(hm2, B->Y1)
当 B 修改为 B->Y2 时:
hm4 = g(hm3, B->Y1)
hm5 = f(hm4, B->Y2)
hm5 是数据库当前状态的新哈希码 (A->X, B->Y2, C->Z)
备份时:
hb1 = f(hb0, A->X, B->Y, C->Z)
当 B 修改为 B->Y2 时:
hb2 = g(hb1, B->Y)
hb3 = f(hb2, B->Y2)
现在 hm5 和 hb3 应该匹配,因为两个数据库的当前状态是相同的。
那么:有没有这样的算法f和g?我希望我把问题说清楚了......谢谢。
java - Java Array HashCode 实现
这很奇怪。一位同事询问了 java 中 myArray.hashCode() 的实现。我以为我知道,但后来我进行了一些测试。检查下面的代码。我注意到的奇怪的事情是,当我写出第一个系统时,结果是不同的。请注意,它几乎就像是在报告内存地址并修改类移动地址或其他东西。只是想我会分享。
c# - .NET 唯一对象标识符
有没有办法获取实例的唯一标识符?
GetHashCode()
对于指向同一个实例的两个引用是相同的。但是,两个不同的实例可以(很容易)获得相同的哈希码:
我正在编写一个调试插件,我需要获取某种 ID 用于在程序运行期间唯一的引用。
我已经设法获得了实例的内部地址,它是唯一的,直到垃圾收集器 (GC) 压缩堆(= 移动对象 = 更改地址)。
堆栈溢出问题Object.GetHashCode() 的默认实现可能是相关的。
这些对象不受我的控制,因为我正在使用调试器 API 访问正在调试的程序中的对象。如果我可以控制这些对象,那么添加我自己的唯一标识符将是微不足道的。
我想要用于构建哈希表 ID -> 对象的唯一 ID,以便能够查找已经看到的对象。现在我这样解决了:
c# - GetHashCode 扩展方法
在阅读了 StackOverflow 上有关覆盖的所有问题和答案后,GetHashCode()
我编写了以下扩展方法,以便轻松方便地覆盖GetHashCode()
:
(我基本上只重构了有人贴在那里的代码,因为我很喜欢它可以通用)
我这样使用:
你看到这段代码有什么问题吗?
java - Java 字符串上 hashCode() 的一致性
Java String 的 hashCode 值计算为 ( String.hashCode() ):
是否有任何情况(比如 JVM 版本、供应商等)以下表达式的计算结果为 false?
更新#1:如果您声称答案是“是的,存在这种情况” - 那么请给出一个具体示例,说明何时“这是一个 Java 字符串”.hashCode() != 586653468。尽量做到具体/具体尽可能。
更新#2:我们都知道依赖 hashCode() 的实现细节通常是不好的。但是,我专门讨论的是 String.hashCode() - 所以请让答案集中在 String.hashCode() 上。Object.hashCode() 在这个问题的上下文中完全不相关。
java - 证明:为什么 java.lang.String.hashCode() 的实现与其文档匹配?
著名的 JDK 文档说:java.lang.String.hashCode()
String 对象的哈希码计算为
使用
int
算术运算,其中s[i]
是i
字符串的第 * 个字符,是字符串n
的长度,^
表示取幂。
这个表达式的标准实现是:
看着这让我觉得我正在通过我的算法课程睡觉。该数学表达式如何转换为上面的代码?
java - 哈希码与 SHA-1
我想比较一些代表树的大对象并缓存一些东西,以避免每次将新对象与已经存在的对象进行比较......
问题是什么是最好的?(性能和碰撞之间的妥协......)。
一方面,我有一个基于各种字段值的常规 hashCode 函数(遵循有效 Java的第 3 章。但我无法评估这种方法所带来的潜在冲突。
另一方面,我有来自标准 java 发行版的 MessageDigest 方法和 SHA-1 算法。我认为它不会有效率,但我可能会有更少的碰撞。我对吗 ?在我的情况下这是一个正确的解决方案还是我完全错了?
问题是我不知道物体的大小。另请注意,计算的值不会在 HashTable 中使用。
谢谢...
c# - c# 中枚举的数据结构,其中查找通常基于所存储对象的一个属性
我想知道人们会推荐什么数据结构来执行以下操作。我有一个具有三个主要属性的类,例如。
另一个类包含这些对象的集合,并且经常需要枚举这些对象,我主要使用 LINQ。很多时候,虽然我只需要主要基于属性 One 的值来查找/枚举这些对象的子集,所以我想做的是将这些对象存储在基于该属性的有效数据结构中。我可以执行以下操作:
但这让我觉得效率很低,我知道我需要某种哈希表,但以前从未在 C# 中使用过,我不确定有什么用。
其他一些要求/注意事项:
- 所有对象都是不可变的,并且具有固定的哈希码,这些哈希码是根据类在构造函数中实例化的值计算得出的
- 必须能够在数据结构的同一个“槽”中存储多个具有相同值(以及因此哈希码)的属性 One 的项目
- 必须能够从集合中自由添加和删除对象
java - 如何获取覆盖 hashCode() 的对象的唯一 ID?
当 Java 中的一个类没有覆盖hashCode()时,打印这个类的一个实例会给出一个很好的唯一编号。
Object 的 Javadoc 谈到了hashCode():
在合理可行的情况下,由 Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。
但是当类覆盖hashCode()时,我怎样才能得到它的唯一编号?