Set 里面的去重復原理
set及子類的 方法add.()
其實里面調用了重寫之后的equals()和 hashcode()方法 :
重寫之后hashcode() 比較是這倆元素對象的哈希值是否是同一個哈希值如果不同講該元素放到數組中 如果相同返回true就進行equals比較
重寫之后equals() 比較這倆元素對象是否是同一個對象 是返回 true 而且不把該元素放到數組中
HashSet 的數據結構
哈希表 = 數組+鏈表/紅黑二叉樹(在鏈表元素大於8個之上就轉換為二叉樹)
比較的是里面的元素對象的hashcode 是否相同 相同就掛在同一個數組元素下面
如果元素不同 但是哈希值相同這就是哈希值沖突 會進行equals判斷 是否為同一個元素
使用 hashset集合來存儲自定義類型 該類必須重寫hashcode和equals方法再Set集合中才可以進行判斷去重復
LinkedHashSet 集合包含了HashSet集合但是在這之上增加了 一條鏈表是來記錄順序的
所以LinkedHashSet是有序的