Java中HashSet存儲對象判斷是否重複原理分析

HashSet  根據每個對象的哈希碼值(調用hashCode()獲得)用固定的算法算出它的存儲索引,把對象存放在一個叫散列表的相應位置(表元)中:

  • 存對象時,hashSet集合首先調用該對象的hashCode方法來獲得該對象的hashCode值,與hash表中的值進行比較。如果不存在,則直接把該對象存入集合中,並把該hashCode值存入hash表中,此次add操作結束。如果存在,則進行下面的計算。

  • 通過”==”操作符判斷已經存入的對象與要存入的對象是否爲同一對象。如果true則集合認爲添加相同對象,add失敗。如果false(不是同一對象)則進行下面的計算。(這一條很重要,保證了,不管如何操作,在HashSet中都不可能存入同一個對象兩次)

  • 調用要添加的對象的equals()方法,並把集合中的另一元素作爲參數傳入,如果返回值爲true則集合認爲添加相同對象,add失敗。否則添加成功。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章