请问java中重写hashcode的作用 何时才要重写hashcode

 我来答
234369425
推荐于2018-04-13 · TA获得超过814个赞
知道小有建树答主
回答量:433
采纳率:0%
帮助的人:189万
展开全部
hash code是一种编码方式,在Java中,每个对象都会有一个hashcode,Java可以通过这个hashcode来识别一个对象。至于hashcode的具体编码方式,比较复杂(事实上这个编码是可以由程序员重载的),可以参考数据结构书籍。而hashtable等结构,就是通过这个哈希实现快速查找键对象。这是他们的内部联系,但一般编程时无需了解这些,只要知道hashtable实现了一种无顺序的元素排列就可以了。
  两个对象值相同(x.equals(y) == true),则一定有相同的hash code。

===============================================================
下面是String类的hashcode方法
/**
* Returns a hash code for this string. The hash code for a
* <code>String</code> object is computed as
* <blockquote><pre>
* s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
* </pre></blockquote>
* using <code>int</code> arithmetic, where <code>s[i]</code> is the
* <i>i</i>th character of the string, <code>n</code> is the length of
* the string, and <code>^</code> indicates exponentiation.
* (The hash value of the empty string is zero.)
*
* @return a hash code value for this object.
*/
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;

for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}

==============================================================
http://blog.csdn.net/richardsundusky/article/details/1508028
这篇文章介绍的更详细
追问
那我直接这么重写hashcode可以么
String hashCode(String result)
result="。。。。"+instance.hashCode();
似乎没有什么意思 但是我打印出来看了一下 重写和不重写输出的结果是不一样的
返回值重写为int的方式我以前也写过 就是不太清楚重写hashcode的作用和意思
最后谢谢你的回答
追答
你看下那篇文章、你就都明白了

参考资料: http://baike.baidu.com/view/551991.html?fromTaglist

jinkingmanager
2011-12-31 · 超过14用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:40.8万
展开全部
在比较一个类的两个对象时,如果你希望采用你自己的规则来判断两者是否相同,就重写hashCode方法,来实现自己的比较逻辑。如果不重写,就是使用默认的hash code来比较。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9308069
2011-12-31 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1938万
展开全部
万分之一的情形:
--当数据量大,10亿以上级别,对象经常冲突。
--当性能要求高,hashcode内置的散列算法不能满足特殊的数据结构要求。自己根据自己的对象作出特定的散列算法,加速过程,比如有些窗口控件ID甚至改成简单+1达到更快生成。
都是极端情况。
总之,一般不重写。只是在教学中提出来用于展示原理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feaieadfeA
2011-12-31
知道答主
回答量:11
采纳率:0%
帮助的人:11.8万
展开全部
重写是当你所管理的对象是无规律可循或规律异于一般原理,而你自己创造一个规律。例如,如果你所开发的系统在涉及某个区内的身份证号,则前5位不需要作hash,后3位也不用,为了快速检索,自己定义hash函数,只处理其中的某几位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fxch904021835
2011-12-31 · 超过10用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:29.5万
展开全部
重写equals方法时,要重写hashcode方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式