學習需要系統,但是系統的學習是自己完善而得來的。
不依托業務,不切合工作,不實踐的學習,都是無效的學習。因此我的博客是這樣的:不會專門寫XXX系列,而是想到什麼或者工作用到什麼,就寫點什麼。
因為,今天下班的時候,從公司走回住的地方,和逗逼同事無聊的聊了很久。所以,今天來寫點關於:hash的話題吧。
(就是這麼任性,想到什麼就寫什麼。這個因為和所以,沒有半毛錢關系。哈哈……)
object 中的 hashcode(),是內存地址的映射(不嚴謹,但是好記,唯一性)。equals(),比較的是對象的內存地址映射是否相等。
原則:如果兩個對象相等,那麼兩個對象的hashcode也應當相等。因此,重寫equals,就必須重寫hashcode。
hash相關的Java API,hashMap,hashSet等散列集合內部會建立自己的hash鏈,該hash鏈,用於索引對應hash集合,使遍歷更加高效。
如果對象的equals相等,而hashcode不相等,那麼散列集合在增、刪、改元素時,就會出錯。
原因為(以刪為例子):刪除散列集合中的元素,
1:對元素進行hashcode計算。
2:用得到的hashcode在散列集合索引鏈中進行查找(非遍歷式,而是匹配式,智能到索引中相近的地方進行對比)
3:對象的equals相等,而hashcode不相等,那麼就無法完成刪除動作。造成內存洩漏。
剩余部分,你懂的。
歡迎扔磚,指正。謝謝~