( tip:底層是用hashMap 實現的)
HashSet底層使用了哈希表來支持的,特點:存儲快
往HashSet添加元素的時候,HashSet會先調用元素的HashCode方法得到元素的哈希值,然后通過元素的哈希值經過異或移位等運算,就可以算出該元素在哈希表中的存儲位置。
運行原理
如果算出的元素存儲的位置目前沒有任何元素存儲,name該元素可以直接存儲在該位置上;如果算出的元素的存儲位置上目前已經有了其他的元素,那么還會調用該元素的 equals方法 ,與該位置的元素進行比較一次,如果過equals方法返回的是true,那么該位置上的元素就會被視為重復元素,不允許被添加,如果false,則允許添加。
實現原理
hashset是基於hashmap實現的,默認構造函數是構建一個初始容量為16,負載因子為0.75的hashmap。封裝了一個hashmap 對象來存儲所有的集合元素,所有放在 hashset中的集合元素實際上由 hashmap的key來保存,而 hashset中的 hashmap的 value則存儲了一個PRESENT的靜態object對象
hashset和 treeset有什么區別
hashset是由一個hash表來實現的,因此它的元素是無序的,add,remove,contains方法的時間復雜度是 O(1)
treeset是由一個樹形結構來實現的,它里面的元素是有序的,因此,add,remove,contains方法的時間復雜度是 O(logn)