Java-hashCode()
hashcode相同時,而equals()方法不相同,叫做hash沖突,
- 官方想給每個物件一個唯一標識,即hashcode但目前任何hash演算法都無法滿足,資料量大時都會產生沖突,
- 當兩個物件的equals相同的時候,如果是字串,那不用說都是從字串常量池里面取得,也就是說同一個,這個時候他們的值是相同的,hashcode也是相同的,當我們自定義類物件時,也是一樣的,因為重寫了equals方法,所以判斷他們的內容也就是每一個屬性,也是一樣的,兩個物件相同的時候他們都是從常量池里取得同一份資料,所以相同,
- hashmap底層用hash表進行存盤,即一個陣列加若干鏈表,在呼叫put方法存資料的時候,hashmap會先計算它的鍵值的hashcode,然后根據hashcode計算出他在桶內的角標,這個桶值得就是陣列的每個槽位,當遇到hashcode值相同的物件時候也就是產生hash沖突的時候,就放在同一個槽位里面形成鏈表,當鏈表的長度超過8時的時候就會轉化為樹,形成紅黑樹,也就是在這個鏈表或者是樹上的資料他們的hashcode是相同的,但他們的值不一定是相同的,
比如:


·此時,這兩個值得hashcode就是相同的,所以肯定是基于同一個槽位的,放在一個鏈表上,這就是當hashcode相同的時候,用equals判斷物件,不一定相同,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/257764.html
標籤:其他
