hashcode是什么?他的值代表的什么意思?

cn-sz-xuwf 2007-07-11 12:33:55
请问,我在使用toString方法的时候返回一个"类型名@#$%#^%$"的东西,看书上讲是hashcode,那hashcode是什么呢?他的值代表什么意思呢?为什么会有hashcode呢?
...全文
5138 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
baolin811 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

一个对象的HashCode就是一个简单的Hash算法的实现,虽然它和那些真正的复杂的
Hash算法相比还不能叫真正的算法,但如何实现它,不仅仅是程序员的编程水平问题,
而是关系到你的对象在存取时性能的非常重要的问题.有可能,不同的HashCode可能
会使你的对象存取产生,成百上千倍的性能差别.
默认的实现是将对象内部地址转化为整数作为HashCode,这当然能保证每个对象具有不同
的……
[/Quote]

回答的很好,但不能同意这句话:"这当然能保证每个对象具有不同的HasCode"
实际上不同的对象也有可能有相同的hashCode……。
龙腾冰 2012-03-22
  • 打赏
  • 举报
回复
嗯啊,学习一下
Leson_Yin 2012-03-22
  • 打赏
  • 举报
回复
最近喜欢挖坟,哈哈。。。
i李小武 2011-03-15
  • 打赏
  • 举报
回复
http://blog.csdn.net/ol_beta/archive/2010/11/26/6037852.aspx
楼主看看这个有用么!
linken88815 2011-03-15
  • 打赏
  • 举报
回复
受教!
liuxuejin 2011-03-15
  • 打赏
  • 举报
回复
由于java没有指针,但是却用了一种很灵活的方式来查找对象,那就是hashcode,hashcode如果没有重载的话,那么这个值就是对象的地址,如果重载了,那就是具体的实现,比如 Ineger的hashcode就是它的value,String
的hashcode就是著名的33法改进过来的算法计算出来的!hashcode可以理解为一种标记,就好像设计数据库表主键要唯一的需要一样!
  • 打赏
  • 举报
回复
呵呵,算是学习了一下!
zqfddqr 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 weiqiyiji 的回复:]
hashCode是散列码,用来快速查询用的
你看到的那一串的格式如下,比如一个String@4e57de
"@ "前面的是你的类名,后面的就是散列码的16进制表示。hashCode的查询原理:先有很多个数组,然后你要往容器里面放东西,比如hashSet,如放一个String=“Hello”,那么计算机会先计算散列码,然后放入相应的数组中,数组的索引就是从散列吗计算来的,然后再装入数组里的容器里……
[/Quote]够全
清晨v 2011-03-13
  • 打赏
  • 举报
回复
学习了,
thelingers 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gaohua027 的回复:]
一个对象的HashCode就是一个简单的Hash算法的实现,虽然它和那些真正的复杂的
Hash算法相比还不能叫真正的算法,但如何实现它,不仅仅是程序员的编程水平问题,
而是关系到你的对象在存取时性能的非常重要的问题.有可能,不同的HashCode可能
会使你的对象存取产生,成百上千倍的性能差别.
默认的实现是将对象内部地址转化为整数作为HashCode,这当然能保证每个对象具有不同
的H……
[/Quote]这个比较好,言简意赅
jionjionyoushen 2011-03-08
  • 打赏
  • 举报
回复
学习学习!
shagan 2011-03-08
  • 打赏
  • 举报
回复
对于查看并访问一个值,我想你知道数组最快,
但是,现实中,访问一个值直接以数组来表示很少,
比如50个学生,以学号为PK(XXX001~XXX050),我们可以把它们以学号放入一个数组中,
XXX001->stu[0]-----XXX050->stu[49],在程序中给出一个学号,我们可以以一种简单的方式映射到数组中,
定一个函数F(学号)=数组顺序,F则称之为hash函数,
而现实中F得到数组顺序还可能产生冲突,即不同对象,产生的hash值是一个的,在java中,则需要equal函数作补充,解决冲突。
所以hashCode可以看作是参数数组顺序的hash函数,你在java的Debug中,可以看到HashMap等之类的Hash类中,均有一大堆数组产生。
yanjianyue123 2010-09-03
  • 打赏
  • 举报
回复

学习了!
涛涛_2009 2010-03-09
  • 打赏
  • 举报
回复
对汉字是怎样进行哈希编码的呢,不解
pauliuyou 2010-02-27
  • 打赏
  • 举报
回复
一个对象快速定位自己的索引信息用的
狂想者 2010-02-27
  • 打赏
  • 举报
回复
不是很明白,需要进一步学习。。。。。
fishrui 2009-10-27
  • 打赏
  • 举报
回复
建议LZ看下《数据结构》中关于哈希表的介绍。
1.内存中有张哈希表,哈希表的数据结构类似二维数组。[0]存储的是哈希值,后面存储的就是哈希值和[0]相等的对象。所以哈希值相等不一定等同于对象相等。就像旅馆客房有的房间住几个人,不能通过确定房间号就确定某个具体的人。
2.哈希码是散列码,越散列说明重复越小,效率越高。通过哈希码可以快速的地位内存地址。
  • 打赏
  • 举报
回复
比如说一个 int[] 返回的就是 [I@2234ac 之类的,如果是 long[][] 得到的是 [[J@2234ad
如果是 Object 那就是 Ljava.lang.Object;@2234ad

如果 hashCode() 没有被重写的话,那基本上可以看作是对象所引用内存的地址。
springbird 2009-10-26
  • 打赏
  • 举报
回复
新手,学习了
dw578791891 2009-10-26
  • 打赏
  • 举报
回复
还是不是很清楚
3L的说是将对象转化为hashcode那么==成立
那么hashcode就应该相等啊
新手不知道说的对不对!
加载更多回复(15)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧