Java中Set集合是如何實現添加元素保證不重復的?
Set集合是一個無序的不可以重復的集合。今天來看一下為什么不可以重復。
Set是一個接口,最常用的實現類就是HashSet,以HashSet為例。
HashSet類實現了Set接口, 其底層其實是包裝了一個HashMap去實現的。HashSet采用HashCode算法來存取集合中的元素,因此具有比較好的讀取和查找性能。
HashSet 添加元素過程
向 HashSet 添加元素,首先調用元素所在類的 hashCode() 方法,計算元素的哈希值,算出在 hashset 底層數組的存放位置。
判斷數組該位置上是否已經有元素。
如果該位置沒有其他元素,則元素添加成功。
如果該位置,有其他元素,則比較兩個元素的 hash 值是否相同;
如果 hash值不相同,則元素添加成功, 以鏈表的形式存儲;
如果 hash值相同,再用 該類的equal() 方法比較
equal 返回 true, 元素添加失敗,替換了該元素
equal 返回false 元素添加成功, 並以鏈表的節點形式存儲