HashSet 根據每個對象的哈希碼值(調用hashCode()獲得)用固定的算法算出它的存儲索引,把對象存放在一個叫散列表的相應位置(表元)中:
存對象時,hashSet集合首先調用該對象的hashCode方法來獲得該對象的hashCode值,與hash表中的值進行比較。如果不存在,則直接把該對象存入集合中,並把該hashCode值存入hash表中,此次add操作結束。如果存在,則進行下面的計算。
通過”==”操作符判斷已經存入的對象與要存入的對象是否爲同一對象。如果true則集合認爲添加相同對象,add失敗。如果false(不是同一對象),則進行下面的計算。(這一條很重要,保證了,不管如何操作,在HashSet中都不可能存入同一個對象兩次)
調用要添加的對象的equals()方法,並把集合中的另一元素作爲參數傳入,如果返回值爲true則集合認爲添加相同對象,add失敗。否則添加成功。