向HashSet插入自定義物件判斷是否重複
一.HashSet概述
HashSet實現Set介面,由雜湊表(實際上是一個HashMap例項)支援。它不保證set 的迭代順序;特別是它不保證該順序恆久不變。此類允許使用null元素。
二.儲存方式與實現
如果不等,則新增到該陣列索引對應的連結串列中。
Set的實現類的集合物件中不能夠有重複元素,HashSet也一樣他是使用了一種標識來確定元素的不重複,HashSet用一種演算法來保證HashSet中的元素是不重複的,HashSet採用雜湊演算法,底層用陣列儲存資料。預設初始化容量16,載入因子0.75
Object類中的hashCode()的方法是所有子類都會繼承這個方法,這個方法會用Hash演算法算出一個Hash(雜湊)碼值返回,HashSet會用Hash碼值去和陣列長度取模, 模(這個模就是物件要存放在陣列中的位置)相同時才會判斷陣列中的元素和要加入的物件的內容是否相同,如果不同才會新增進去。
三.Hashset在判斷是否重複機制
當呼叫了 HashSet 的 add 方法存放物件 obj , HashSet 會首先呼叫 obj 的 hasCode 方法得到該物件的雜湊碼, HashSet 會使用一個演算法把它的雜湊碼轉換成一個陣列下標,該下標“標記”了 obj 的位置。如果這個位置上的連結串列中沒有元素,那麼就把 obj 物件新增到連結串列上。如果這個位置上的連結串列中已經有了元素,則遍歷這個連結串列,呼叫 obj 的 equals 方法,判斷 obj 是否和其中的某個元素重複,如果沒有重複的元素,那麼就將 obj 新增到連結串列上;如果有重複的元素,則不會將 obj 物件存入 HashSet 中。
四.自定義物件重複判斷
所以,如果自定義類的插入查重,就要重寫equals方法,在這同時,我們還的先重寫hashCode方法,不然的話,HashSet插入的時候首先判斷的是所生成的hashcode是否相同,如果相同的話,才會呼叫之前重寫的equals方法。
相關文章
- 判斷表中資料是否有重複
- dataset 判斷整列是否有重複,找出重複資料
- 判斷字元是否重複正規表示式字元
- 判斷一個物件是否為空物件,判斷一個物件中是否有空值物件
- Javascript 判斷物件是否相等JavaScript物件
- 小測試:HashSet可以插入重複的元素嗎?
- js判斷物件是否為空JS物件
- 判斷物件值是否為空物件
- 如何判斷Javascript物件是否存在JavaScript物件
- java判斷物件是否為空Java物件
- 判斷物件是否為空物件的方式物件
- Java stream判斷列表是否包含某幾個元素/重複元素Java
- javascript陣列如何判斷是否有重複的陣列項JavaScript陣列
- 判斷元素是否有重疊部分
- 判斷objectStore物件倉庫是否存在Object物件
- 如何判斷 JavaScript 物件是否為空?JavaScript物件
- js判斷兩個物件是否相等JS物件
- 判斷物件是否在視線內物件
- JS判斷物件是否為空物件的方法JS物件
- 如何判斷一個物件是否為jQuery物件物件jQuery
- js 判斷eventTarget 重複新增JS
- ES6 判斷是否為空物件物件
- 記憶體管理:判斷物件是否存活記憶體物件
- JS——判斷一個物件是否為空JS物件
- 如何判斷一個jquery物件是否存在jQuery物件
- js如何判斷一個物件是否存在JS物件
- 判斷物件是否相等的方法,==與 isEqual物件
- 集合框架-HashSet儲存字串、自定義物件並遍歷框架字串物件
- 利用位運算判斷陣列中是否有重複的數字陣列
- React自定義hook之:useClickOutside——判斷是否點選DOM之外區域ReactHookIDE
- Java之ArrayList去除重複元素(包括字串和自定義物件)Java字串物件
- javascript判斷物件是否為空物件程式碼例項JavaScript物件
- 深入理解JVM(③)判斷物件是否還健在?JVM物件
- JavaScript 中,如何判斷兩個物件是否相等?JavaScript物件
- JavaScript 判斷物件中是否有某屬性JavaScript物件
- js判斷一個物件是否為陣列JS物件陣列
- JavaScript 判斷陣列或者物件是否為空JavaScript陣列物件
- vue透過自定義指令判斷當前元素是否在可視區域Vue