java 中hashCode的问题~

Java\u4e2d\u7684HashCode\u95ee\u9898

1.hashcode\u662f\u7528\u6765\u5224\u65ad\u4e24\u4e2a\u5b57\u7b26\u4e32\u662f\u5426\u76f8\u7b49\u7684\u4f9d\u636e,\u4e0d\u540c\u7684\u5b57\u7b26\u4e32\u4e0d\u53ef\u80fd\u6709\u76f8\u540c\u7684hashcode,\u4f46\u4e0d\u540c\u7684hashCode\u7ecf\u8fc7\u4e0e\u957f\u5ea6\u7684\u53d6\u4f59\uff0c\u5c31\u5f88\u53ef\u80fd\u4ea7\u751f\u76f8\u540c\u7684hashCode,\u5c31\u662f\u6240\u8c13\u7684\u54c8\u5e0c\u51b2\u7a81.
2.\u76f8\u540c\u7684\u5b57\u7b26\u4e32\u7684hashcode\u4e0d\u53ef\u80fd\u4e0d\u540c;
3.hashcode\u662f\u7531\u7b80\u5355\u7684Hash\u7b97\u6cd5\u5f97\u51fa\u6765\u7684,\u6839\u636e\u5b57\u7b26\u4e32\u7684\u503c\u7b97\u51fa\u6765\u7684,\u6bcf\u6b21\u7b97\u51fa\u6765\u7684\u7ed3\u679c\u90fd\u76f8\u540c

\u55e8\u8fd9\u4e2a\u95ee\u9898\u662f\u8fd9\u6837\u7684\uff01
\uff08hash code\uff09\u6211\u4eec\u79f0\u4e3a\u54c8\u5e0c\u561b\uff0c\u6216\u53eb\u6563\u5217\u7801\u3001\u662f\u7531\u5bf9\u8c61\u5bfc\u51fa\u7684\u4e00\u4e2a\u6574\u578b\u503c\u3002\u7406\u8bba\u4e0a\u5c06\u5b83\u662f\u6ca1\u6709\u89c4\u5f8b\u7684\u3002\u4e0d\u540c\u7684\u5bf9\u8c61\u5e94\u8be5\u5177\u6709\u4e0d\u540c\u7684hashcode\u3002
\u6807\u51c6\u7684String\u5e93\u4e2dString\u7c7b\u83b7\u53d6\u6563\u5217\u7801\u7684\u7b97\u6cd5\u5982\u4e0b\uff1a
int hash = 0;
for(int i=0;i<length();i++) hash = 31 * hash + charAt(i);
\u7531\u6b64\u53ef\u89c1String\u7c7b\u578b\u7684s1\u548cs2\u7684\u6563\u5217\u7801\u662f\u6839\u636e\u5185\u5bb9\u5bfc\u51fa\u7684\uff0c\u56e0\u4e3a\u5b83\u4eec\u6709\u76f8\u540c\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u6563\u5217\u7801\u76f8\u540c\u3002

\u8be6\u7ec6\u7684\u8bf7\u53c2\u770bjava\u5e93\u6e90\u4ee3\u7801\u6216\u300ajava\u6280\u672f\u6838\u5fc3\u6280\u672f\u53771\u300b5.2.3 \u795d\u613f\u5bf9\u60a8\u6709\u6240\u5e2e\u52a9

嗯,是的,你可以简单的将 hashCode 的值理解为内存地址值,但这不是绝对物理地址,它是经过哈希算法转成的 int 值;
“两个对象的hashCode一样的,引用怎么指向啊?”
这个,跟你简单的说一下 java 中内存是怎么管理的你就明白了:
eg:Object obj = new Integer(80);
当一个对象被创建时,将在 JVM 运行空间的堆内存中被分配一块内存,来存放 Integer(80) 这个实例对象,这里的 obj 不是一个对象,而是一个对象(Integer对象)的引用类型变量,引用类型变量 JVM 会在栈内存中给它分配一块内存空间,它的值(obj 的值)其实就是它指向的对象引用的值(hashCode 的值);
很明显,两个对象的 hashCode 值一样,说明它是同一个实例对象,不管有多少个引用类型变量指向这个对象,其实这些引用变量所引用的对象是一样的。

.hashcode是用来判断两个字符串是否相等的依据,不同的字符串不可能有相同的hashcode,但不同的hashCode经过与长度的取余,就很可能产生相同的hashCode,就是所谓的哈希冲突.
2.相同的字符串的hashcode不可能不同;
3.hashcode是由简单的Hash算法得出来的,根据字符串的值算出来的,每次算出来的结果都相同

扩展阅读:javascript appendchild ... java webservice ... basic mobile phone ... javascript&jquery ... free xbox live ... jquerymobile 100 ... jquerymobile日本ad ... java serversocket ... java windowbuilder ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网