java 的集合有兩類,一類是 List,還有一類是 Set。前者有序可重復,后者無序不重復。當我們在 set 中插入的時候怎么判斷是否已經存在該元素呢,可以通過 equals 方法。但是如果元素太多,用這樣的方法就會比較滿。
于是有人發明了哈希算法來提高集合中查找元素的效率。 這種方式將集合分成若干個存儲區域,每個對象可以計算出一個哈希碼,可以將哈希碼分組,每組分別對應某個存儲區域,根據一個對象的哈希碼就可以確定該對象應該存儲的那個區域。
hashCode 方法可以這樣理解:它返回的就是根據對象的內存地址換算出的一個值。這樣一來,當集合要添加新的元素時,先調用這個元素的 hashCode 方法,就一下子能定位到它應該放置的物理位置上。如果這個位置上沒有元素,它就可以直接存儲在這個位置上,不用再進行任何比較了;如果這個位置上已經有元素了,就調用它的 equals 方法與新元素進行比較,相同的話就不存了,不相同就散列其它的地址。這樣一來實際調用 equals 方法的次數就大大降低了,幾乎只需要一兩次。