|
1.hashcode()到底是干什么用的?好像是和數(shù)據(jù)結(jié)構(gòu)的hash表有關(guān)?java對(duì)象怎么會(huì)和hash表有關(guān)的?java中的對(duì)象都是存在一個(gè)hash表中嗎? 當(dāng)你的對(duì)象存儲(chǔ)在HashSet,HashMap,HsahTable等以hash表為工作機(jī)制的容器的時(shí)候 你才需要關(guān)心這個(gè)函數(shù),不是java中對(duì)象都是存在一個(gè)hash表里面 2.為什么a.equal(b)==true則必定a.hashcode()==b.hashcode()。equal代表內(nèi)容,hashcode代表內(nèi)存地址,難道我理解錯(cuò)了嗎? 誰說equals是比較內(nèi)容的,默認(rèn)的equals 就是與 == 一樣的效果 3.很多類都重寫了hashcode,比如Integer.hashcode返回的是Integer的intValue。他們?yōu)槭裁匆貙懩兀? 就是因?yàn)镮nteger重寫了equals() 方法 ,所以要重寫hsahCode(),以保證a.equals(b) 為true時(shí)候,有a==b;重寫只要為了滿足可能把Integer對(duì)象放到hash容器里面 4.有人說a.equal(b)==true則必定a.hashcode()==b.hashcode();反之 a.hashcode()==b.hashcode()則不一定a.equal(b)==true; 那奇怪了,hashcode豈不是毫無用處了?大家都用hashcode做什么呢? 用hsahCode()主要是支持hash容器的正確運(yùn)行,hash容器根據(jù)hashCode決定對(duì)象的存儲(chǔ)位置 hash容器速度比較快 |
|
|