我很想知道,人们在这里想到使用
org.apache.commons.lang.builder EqualsBuilder/ HashCodeBuilder
实现equals/ hashCode?这比写自己更好吗?它与Hibernate相处得好吗?你怎么看?
我正在尝试为字符串设想一个好的哈希函数.而且我认为总结字符串中前五个字符的unicode值可能是一个好主意(假设它有五个,否则在它结束时停止).这是一个好主意,还是一个坏主意?
我在Java中这样做,但我不认为这会产生很大的不同.
基本上,我正在尝试创建一个独特对象的对象,一组.我有一个很好的想法,就是只使用带有对象的JavaScript对象作为属性名称.如,
set[obj] = true;
Run Code Online (Sandbox Code Playgroud)
这很有效.它适用于字符串和数字,但对于其他对象,它们似乎都"散列"到相同的值并访问相同的属性.是否有某种方法可以为对象生成唯一的哈希值?字符串和数字如何做,我可以覆盖相同的行为吗?
我在Essential C#3.0和.NET 3.5书中读到:
GetHashCode()在特定对象的生命周期内的返回应该是常量(相同的值),即使对象的数据发生了变化.在许多情况下,您应该缓存方法返回以强制执行此操作.
这是一个有效的指导方针吗?
我在.NET中尝试了几种内置类型,但它们的行为并不像这样.
Java String的hashCode值计算为(String.hashCode()):
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Run Code Online (Sandbox Code Playgroud)
是否存在以下表达式将评估为false的任何情况(例如JVM版本,供应商等)?
boolean expression = "This is a Java string".hashCode() == 586653468
Run Code Online (Sandbox Code Playgroud)
更新#1:如果您声称答案是"是,有这种情况" - 那么请举一个具体的例子,说明"这是一个Java字符串".hashCode()!= 586653468.尝试具体/具体尽可能.
更新#2:我们都知道,依赖hashCode()的实现细节通常很糟糕.但是,我正在特别谈论String.hashCode() - 所以请将答案集中在String.hashCode()上.Object.hashCode()在这个问题的上下文中完全不相关.
请看下面的图片.当我们用java创建一个带有new关键字的对象时,我们从OS获取一个内存地址.
当我们写作时,new我们可以看到一个"特殊"字符串作为输出.我的问题是:
如果是操作系统给我们的内存地址:
a)如何将此字符串转换为二进制?
b)如何获得一个整数变量地址?

什么是正确和好的实施方式__hash__()?
我在谈论返回哈希码的函数,该哈希码随后用于将对象插入哈希表,即字典.
当__hash__()返回一个整数并用于将对象"分箱"为哈希表时,我假设返回的整数的值应该为公共数据均匀分布(以最小化冲突).获得这些价值观的好习惯是什么?碰撞是一个问题吗?在我的例子中,我有一个小类,它充当一个容器类,包含一些int,一些浮点数和一个字符串.
我注意到getHashCode()WP7中的每个控件都有一个方法,它返回一个数字序列.我可以使用此哈希码来识别项目吗?例如,我想识别设备中的图片或歌曲,并将其检查到哪里.如果为特定项目提供的哈希码是唯一的,则可以这样做.
你能帮我解释一下hashCode是什么getHashCode()用的吗?
类Boolean的hashCode()方法实现如下:
public int hashCode() {
return value ? 1231 : 1237;
}
Run Code Online (Sandbox Code Playgroud)
为什么使用1231和1237?为什么不是别的?