天天看點

hashCode和equals方法辨析

首先了解HashSet裡面的元素定位過程:

1.首先調用元素的hashCode()方法來得到元素的哈希值,用來确定目前元素在哪個bucket裡面(可以推出如果兩個元素的hashCode不一樣,則bucket不一樣,則肯定不相等)。

2.每個bucket是一個連結清單,用來存放所有具有相同hashcode的元素。接下來調用目前元素的equals()方法,在目前元素的hashcode對應的bucket的連結清單裡面,查找是否有相同的元素。最後如果目前連結清單中沒有相同的元素,則把目前元素插到連結清單的尾部。

從上述過程中可以得到兩點需要記憶的原則:

1.hashCode相等,equals未必相等。(因為一個連結清單元素的hashcode都是一樣的)

2.equals相等,則hashCode必定相等。(根據查詢的步驟可以知道)

另外:

Object類裡面對象預設的hashCode方法是native method,傳回值是目前對象的記憶體位址。

表達式a == b,就是比較對象a和b在虛拟機中的記憶體位址。