java的HashCode和equals

來源:互聯網
上載者:User

標籤:

什麼時候用到hashcode,什麼時候用到equals?

首先java為每個對象都產生有預設的hashcode,這個java core裡說是java對象的記憶體位址,但是equals方法裡比較的也是對象的記憶體儲存地址,感覺java不會這麼設計。看到一篇博文,http://www.cnblogs.com/dolphin0520/p/3681042.html,文中講hashcode是與對象記憶體位址有關的數字,javacore裡將這個hashcode是返回對象的散列碼,是任意的整數,包括正數和負數。

那麼什麼時候用到hashcode,什麼時候用到equals?就是儲存在set、map這類不允許有重複元素的結構中的對象中,對象本身必須覆蓋hashcode、equals方法,這樣才能保證插入的元素是唯一的。

hashcode是根據對象的成員產生的值,作為尋找的索引,這樣尋找速度十分快,equals方法裡比較的是對象的成員變數值是否相等,雙覆蓋機制來確保不會插入重複的對象,需要注意的是,如果需要修改對象的某些成員,那麼這些成員不要參與到hashcode的計算中,否則將產生不同的hashcode覆蓋掉原來的對象的,這樣對象的引用將失效(指向的對象地址還是修改之前的),這個引用對象的remove、contains方法都將失效,這篇博文講會造成記憶體泄露(http://blog.csdn.net/shixing_11/article/details/5652935),解決的辦法就是不要讓修改的變數參與到hashcode的計算中,這樣就可以正常的刪除和添加了

可以參考一下一下博文:

http://blog.csdn.net/veryitman/article/details/6894447(短)

http://blog.csdn.net/afgasdg/article/details/6889383(長,全)

 

java的HashCode和equals

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.