向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 判斷整列是否有重複,找出重複資料
- 判斷字元是否重複正規表示式字元
- 判斷一個物件是否為空物件,判斷一個物件中是否有空值物件
- 小測試:HashSet可以插入重複的元素嗎?
- js判斷物件是否為空JS物件
- java判斷物件是否為空Java物件
- 判斷物件是否為空物件的方式物件
- JS判斷物件是否為空物件的方法JS物件
- 如何判斷 JavaScript 物件是否為空?JavaScript物件
- 判斷objectStore物件倉庫是否存在Object物件
- js判斷兩個物件是否相等JS物件
- Java stream判斷列表是否包含某幾個元素/重複元素Java
- js 判斷eventTarget 重複新增JS
- React自定義hook之:useClickOutside——判斷是否點選DOM之外區域ReactHookIDE
- 如何判斷一個物件是否為空?物件
- ES6 判斷是否為空物件物件
- 記憶體管理:判斷物件是否存活記憶體物件
- 判斷一個有向圖是否有環
- Java之ArrayList去除重複元素(包括字串和自定義物件)Java字串物件
- JavaScript 判斷物件中是否有某屬性JavaScript物件
- 深入理解JVM(③)判斷物件是否還健在?JVM物件
- JavaScript 中,如何判斷兩個物件是否相等?JavaScript物件
- python如何判斷一個物件是否是列表Python物件
- vue透過自定義指令判斷當前元素是否在可視區域Vue
- 如何判斷FMEA的存在是否還有意義?
- js系列文章之 : 判斷 object 物件是否為空JSObject物件
- JDK是如何判斷兩個物件是否相同的?判斷的流程是什麼?JDK物件
- 寫個方法判斷陣列物件中是否存在某個物件陣列物件
- 技術乾貨:如何判斷一個整數陣列是否存在重複元素......陣列
- js判斷物件裡面是否有某個屬性JS物件
- 如何判斷一個js物件是否存在迴圈引用JS物件
- Python判斷物件是否為檔案物件(file object)的三種方法Python物件Object
- 【深入學習JVM 03】判斷一個物件是否可回收JVM物件
- 判斷陣列裡面的json 物件是否相等,相等則移除陣列JSON物件
- 為什麼判斷物件是否相等, 不建議用 equals ?物件
- 物件導向 約束、自定義異常、加密物件加密
- 判斷字串是否為空字串
- python 判斷是否為中文Python