1. 程式人生 > >面試中問到當兩個物件的hashcode相同會發生什麼

面試中問到當兩個物件的hashcode相同會發生什麼

當兩個物件的hashcode相同會發生什麼

【這個問題基本上就是分界點了】

  1. 一些面試者會回答因為hashcode相同,所以兩個物件是相等的,HashMap將會丟擲異常,或者不會儲存它們。
    如果之前的問題回答的好,面試官的印象比較好,可能會提醒他們有equals()和hashCode()兩個方法,並告訴他們兩個物件就算hashcode相同,但是它們可能並不相等。
    如果掌握的不太好,一些面試者可能就此放棄。那下面的問題也就不了了之了,等於放棄了一個很好的機會。
    而這個問題的答案是:因為hashcode相同,所以它們的bucket位置相同,‘碰撞’會發生。因為HashMap使用連結串列儲存物件,這個Entry(包含有鍵值對的Map.Entry物件)會儲存在連結串列中。這個時候要理解根據hashcode來劃分的陣列,如果陣列的座標相同,則進入連結串列這個資料結構中了,一般的新增都在最前面,也就是和陣列下標直接相連的地方,連結串列長度到達8的時候,jdk1.8上升為紅黑樹,這樣說,無疑是直接的加分項。有的面試官直接跳入資料結構,有的會直接繼續挖掘。