(转)Java中HashCode()方法

本文详细解释了Java中hashCode方法的作用及其实现原理。探讨了hashCode与equals方法的关系,并说明了为何一些类会重写hashCode方法。同时,文章还讨论了hashCode在HashSet、HashMap等容器中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=medium]转自:http://topic.youkuaiyun.com/t/20060401/22/4656654.html



1.hashcode()到底是干什么用的?好像是和数据结构的hash表有关?java对象怎么会和hash表有关的?java中的对象都是存在一个hash表中吗?

[color=red] 当你的对象存储在HashSet,HashMap,HsahTable等以hash表为工作机制的容器的时候 你才需要关心这个函数,不是java中对象都是存在一个hash表里面 [/color]

2.为什么a.equal(b)==true则必定a.hashcode()==b.hashcode()。equal代表内容,hashcode代表内存地址,难道我理解错了吗?

[color=red]谁说equals是比较内容的,默认的equals 就是与 == 一样的效果 [/color]


3.很多类都重写了hashcode,比如Integer.hashcode返回的是Integer的intValue。他们为什么要重写呢?

[color=red] 就是因为Integer重写了equals() 方法 ,所以要重写hsahCode(),以保证a.equals(b) 为true时候,有a==b;重写只要为了满足可能把Integer对象放到hash容器里面 [/color]

4.有人说a.equal(b)==true则必定a.hashcode()==b.hashcode();反之 a.hashcode()==b.hashcode()则不一定a.equal(b)==true; 那奇怪了,hashcode岂不是毫无用处了?大家都用hashcode做什么呢?

[color=red] 用hsahCode()主要是支持hash容器的正确运行,hash容器根据hashCode决定对象的存储位置
hash容器速度比较快 [/color] [/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值