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