1. 程式人生 > >ArrayList,HashSet判斷物件是否重複的原因

ArrayList,HashSet判斷物件是否重複的原因

ArrayList,HashSet判斷物件是否重複的原因

a:ArrayListcontains方法原理:底層依賴於equals方法

       ArrayListcontains方法會使用呼叫方法時,

         傳入的元素的equals方法依次與集合中的舊元素所比較,

         從而根據返回的布林值判斷是否有重複元素。

         此時,當

ArrayList存放自定義型別時,由於自定義型別在未重寫equals方法前,

         判斷是否重複的依據是地址值,所以如果想根據內容判斷是否為重複元素,需要重寫元素的equals方法。 

 

 b:HashSetadd()方法和contains方法()底層都依賴 hashCode()方法與equals方法()

      Set集合不能存放重複元素,其新增方法在新增時會判斷是否有重複元素,有重複不新增,沒重複則新增。

      HashSet集合由於是無序的,其判斷唯一的依據是元素型別的hashCodeequals方法的返回結果。規則如下:

      先判斷新元素與集合內已經有的舊元素的HashCode

       如果不同,說明是不同元素,新增到集合。

       如果相同,再判斷equals比較結果。返回true則相同元素;返回false則不同元素,新增到集合。

      所以,使用

HashSet儲存自定義型別,如果沒有重寫該類的hashCodeequals方法,則判斷重複時,使用的是地址值,如果想通過內容比較元素是否相同,需要重寫該元素類的hashcodeequals方法。