1 回答

TA貢獻(xiàn)11條經(jīng)驗 獲得超10個贊
你好,糾正一下是hashCode()。
【什么是hash】
首先,需要明白hash是什么,hash是用來快速定位元素的一種數(shù)據(jù)結(jié)構(gòu),如給定一個變量我們可以通過hash 確定這個變量在內(nèi)存中的位置 即 變量a 經(jīng)過 hash(a)->就可以確定這個元素在內(nèi)存中的位置。
下面是比較重要的信息:
【hashCode 方法的作用】
object基類 中 有hashcode(),這就導(dǎo)致了所有我們自建的類都繼承了hashcode 方法。
hashcode在單一類當(dāng)中只是一個實例方法并沒有什么大的作用。
[hashcode 應(yīng)用]
? ?在Java集合類當(dāng)中有實現(xiàn)map接口的HashMap、Set接口的HashSet 要知道set集合中存儲的對象的引用所指向的對象是不能重復(fù)的,比如你要實現(xiàn) Set<Student> students[] = new HashSet<>();那么?Student 這個類中必須override(重寫)hashCode()與equals(), 如果不重寫hashCode,只重寫equals(),那么當(dāng)你Student a = new Student("張曉",13);Student b = new Student("張曉",13); 這兩個對象的引用都能被存儲至hashset 集合當(dāng)中,但其實我們?nèi)庋塾^察到的對象已經(jīng)重復(fù)了,這就是因為hashcode沒有重寫,兩個對象的hash code不一致導(dǎo)致的肉眼觀察到的相同內(nèi)容的對象被存儲至了set集合當(dāng)中。
所以總結(jié):
多個 單一類對象實例中,如果兩個對象的hashCode() 相同 ,那么兩個對象equals()? 一定相同 因為是同一個對象,但equals相同 hashCode()不一定相同
在HashTable、HashSet、HashMap 集合中存儲的對象,hashCode 與 equals 結(jié)合來確保元素的肉眼可見的非重復(fù)性。
添加回答
舉報